Oracle PL/SQL Records Type med eksempler

โšก Smart oppsummering

PL/SQL-posttype er en kompleks datatype som grupperer flere kolonner, hver med sitt eget navn og datatype, til รฉn ny type. En post kan defineres pรฅ databasenivรฅ som et lagret objekt eller i et underprogram, og feltene nรฅs med punktumoperatoren.

  • ๐Ÿงฑ Definisjon: En posttype grupperer รฉn eller flere kolonner i รฉn ny datatype.
  • ๐Ÿ”‘ sรธkeord: TYPE-nรธkkelordet forteller kompilatoren at en ny datatype opprettes.
  • ๐Ÿ›๏ธ To nivรฅer: En post pรฅ databasenivรฅ er et lagret objekt; en post pรฅ underprogramnivรฅ er bare synlig i det underprogrammet.
  • ๐Ÿ”— Felttilgang: Felt nรฅs som record_variable.column_name ved hjelp av punktumoperatoren.
  • ๐Ÿ“ฅ Kolonnenivรฅ: Verdier kan tilordnes til ett felt om gangen.
  • ๐Ÿ“ฆ Radnivรฅ: En SELECT INTO kan fylle ut en hel post fra en tabellrad.
  • ๐Ÿงฉ Opptakstyper: Tabellbaserte %ROWTYPE, markรธrbaserte %ROWTYPE og programmererdefinerte poster.

Oracle Type PL/SQL-poster

Hva er en posttype?

En posttype er en kompleks datatype som lar programmereren opprette en ny datatype med รธnsket kolonnestruktur. Hovedkarakteristikkene er:

  • Den grupperer รฉn eller flere kolonner for รฅ danne en ny datatype.
  • Hver av disse kolonnene har sitt eget navn og datatype.
  • En posttype kan godta dataene som รฉn enkelt post som bestรฅr av mange kolonner, eller den kan godta verdien for รฉn bestemt kolonne i en post.
  • En posttype er rett og slett en ny datatype. Nรฅr den er opprettet, lagres den som en ny datatype og kan brukes til รฅ deklarere en variabel i programmer.
  • Den bruker nรธkkelordet 'TYPE' for รฅ instruere kompilatoren om at en ny datatype opprettes.
  • Den kan opprettes hos databasenivรฅ, lagret som et databaseobjekt og brukt pรฅ tvers av databasen, eller pรฅ delprogramnivรฅ, kun synlig inne i underprogrammet.
  • En posttype pรฅ databasenivรฅ kan ogsรฅ deklareres for tabellkolonner, slik at en enkelt kolonne kan inneholde komplekse data.
  • Dataene nรฅs ved รฅ referere til variabelnavnet, deretter en punktumoperator (.), og deretter kolonnenavnet, som ' . '.

Syntaks for รฅ deklarere en posttype

Syntaks for erklรฆring pรฅ databasenivรฅ:

Deklarasjon av posttype pรฅ databasenivรฅ

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

I den fรธrste syntaksen instruerer nรธkkelordet ยซCREATE TYPEยป kompilatoren til รฅ opprette posttypen med navnet ยซtype_name_dbยป med de angitte kolonnene som et databaseobjekt. Dette gis som en individuell setning, ikke inni noen blokk.

Syntaks for deklarasjon pรฅ delprogramnivรฅ:

Deklarasjon av posttype pรฅ underprogramnivรฅ

DECLARE
TYPE <type_name> IS RECORD
(
<column1> <datatype>,
);
BEGIN
<execution_section>;
END;

I denne syntaksen oppretter vi posttypen med navnet ยซtype_nameยป bare inne i underprogrammet. I begge metodene er mรฅten รฅ definere kolonnen og datatypen pรฅ lik.

Eksempel 1: Posttype som et databaseobjekt

I dette programmet ser vi hvordan man oppretter en posttype som et databaseobjekt. Vi oppretter posttypen 'emp_det' med fire kolonner. Kolonnene og deres datatyper er:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • MANAGER (NUMBER)
  • Lร˜NN (ANTALL)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
/

Utgang:

Type created

Code Forklaring

  • Koden ovenfor oppretter typen emp_det som et databaseobjekt.
  • Den har fire kolonner: ansattnummer, ansattnavn, leder og lรธnn, som definert.
  • Nรฅ er 'emp_det' lik alle andre data-type (som NUMBER eller VARCHAR2) og er synlig i hele databasen. Derfor kan den brukes hvor som helst i databasen for รฅ deklarere en variabel av denne typen.

Eksempel 2: Tilgang pรฅ underprogramnivรฅ, kolonnenivรฅ

I dette eksemplet ser vi hvordan man oppretter en posttype pรฅ underprogramnivรฅ og hvordan man fyller ut og henter verdier fra den etter kolonne. Vi oppretter posttypen 'emp_det' pรฅ underprogramnivรฅ og bruker den til รฅ fylle ut og vise data.

Eksempel pรฅ tilgang pรฅ kolonnenivรฅ for posttype

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
guru99_emp_rec.emp_no:= 1001;
guru99_emp_rec.emp_name:= 'XXX';
guru99_emp_rec.manager:= 1000;
guru99_emp_rec.salary:= 10000;
dbms_output.put_line('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no);
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name);
dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary);
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

Utgang:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000
Employee Manager Number: 1000

Code Forklaring

  • Code linje 2โ€“8: Posttypen 'emp_det' deklareres med kolonnene emp_no, emp_name, manager og salary av datatypene NUMBER, VARCHAR2, NUMBER og NUMBER.
  • Code linje 9: Variabelen guru99_emp_rec er deklarert som datatypen 'emp_det'. Dette variabel kan inneholde en verdi som inneholder alle fire feltene.
  • Code linje 11: Fyller "emp_no"-feltet til "guru99_emp_rec" med verdien 1001.
  • Code linje 12: Fyller ut feltet 'emp_name' med verdien XXX.
  • Code linje 13: Fyller ut verdien 1000 i feltet ยซmanagerยป.
  • Code linje 14: Fyller ut verdien 10000 i feltet ยซlรธnnยป.
  • Code linje 15โ€“19: Viser verdien til 'guru99_emp_rec' i utdataene.

Eksempel 3: Tilgang pรฅ delprogramnivรฅ, radnivรฅ

I dette eksemplet ser vi hvordan man oppretter en posttype pรฅ underprogramnivรฅ og fyller den ut pรฅ radnivรฅ. Vi oppretter posttypen 'emp_det' pรฅ underprogramnivรฅ og bruker den til รฅ fylle ut og vise data.

Eksempel pรฅ tilgang pรฅ radnivรฅ for posttype

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);
COMMIT;
SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002;
dbms_output.put_line ('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no);
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name);
dbms_output.put_line ('Employee Salary: '||guru99_emp_rec.salary);
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

Code Forklaring

  • Code linje 2โ€“8: Posttypen 'emp_det' deklareres med kolonnene emp_no, emp_name, manager og salary av datatypene NUMBER, VARCHAR2, NUMBER og NUMBER.
  • Code linje 9: Variabelen guru99_emp_rec er deklarert som datatypen 'emp_det' og kan inneholde alle fire feltene.
  • Code linje 11: Fyller ut tabellen ansatt med 1002 som ansattnr., YYY som ansattnavn, 15000 som lรธnn og 1000 som ledernummer.
  • Code linje 12: Begรฅr innsettingstransaksjonen.
  • Code linje 13: Fyller ut variabelen 'guru99_emp_rec' pรฅ radnivรฅ fra utvalgsspรธrringen for ansattnummer 1002.
  • Code linje 15โ€“19: Viser verdien til 'guru99_emp_rec' i utdataene.

Utgang:

Employee Detail
Employee Number: 1002
Employee Name: YYY
Employee Salary: 1000
Employee Manager Number: 15000

OBS: En posttype kan bare nรฅs pรฅ kolonnenivรฅ nรฅr verdien omdirigeres til en hvilken som helst utdatamodus. Legg merke til at i dette eksemplet samsvarer ikke SELECT-listerekkefรธlgen med postfeltrekkefรธlgen, og det er derfor lรธnns- og lederverdiene vises ombyttet i utdataene.

Typer PL/SQL-poster

Utover den programmererdefinerte posten vist ovenfor, Oracle tilbyr to forankrede posttyper som kopierer strukturen automatisk. Bruk av dem unngรฅr รฅ deklarere kolonner pรฅ nytt og holder posten i takt med tabellen eller markรธren den er basert pรฅ.

Record type Erklรฆrt med Strukturen kommer fra
Tabellbasert post tabellnavn%ROWTYPE Alle kolonnene i en tabell
Markรธrbasert post markรธrnavn%ROWTYPE Markรธrens valgliste
Programmerdefinert post TYPE โ€ฆ ER POST Kolonner du lister opp for hรฅnd

En %ROWTYPE-post er det sikreste valget nรฅr formen skal fรธlge en tabell eller en markรธr, fordi en kolonneendring plukkes opp automatisk ved neste kompilering.

Spรธrsmรฅl og svar

En post grupperer forskjellige kolonner av muligens forskjellige typer i รฉn radlignende struktur. En samling inneholder mange elementer av samme type indeksert av et indeksert indeks. De er ofte kombinert, en samling av poster.

%ROWTYPE deklarerer en post der feltene samsvarer med en tabell eller markรธr automatisk. Bruk den nรฅr posten skal speile den kilden, slik at en kolonneendring gjenspeiles uten รฅ redigere deklarasjonen.

Ja, hvis begge postene er av samme type. SELECT INTO kan ogsรฅ fylle en hel post fra en tabellrad, forutsatt at rekkefรธlgen pรฅ SELECT-listen samsvarer med feltrekkefรธlgen i posten.

Ja. AI kan lese en tabelldefinisjon og produsere en samsvarende TYPE โ€ฆ IS RECORD-blokk, eller anbefale en %ROWTYPE der en live-lenke til tabellen er รฅ foretrekke. Bekreft datatyper fรธr bruk.

En post pรฅ databasenivรฅ opprettes med CREATE TYPE og lagres som et objekt som er synlig i databasen. En post pรฅ underprogramnivรฅ deklareres i en blokk og finnes bare i det underprogrammet.

Oppsummer dette innlegget med: