Oracle PL/SQL Records Type med eksempler
Hva er posttype?
En posttype er en kompleks datatype som lar programmereren lage en ny datatype med ønsket kolonnestruktur.
- Den grupperer én eller flere kolonner for å danne en ny datatype
- Disse kolonnene vil ha sitt eget navn og datatype
- En posttype kan godta dataene
- Som en enkelt post som består av mange kolonner ELLER
- Den kan godta verdien for en bestemt kolonne i en post
- Record type betyr ganske enkelt en ny datatype. Når posttypen er opprettet, vil den bli lagret som en ny datatype i databasen og den samme skal brukes til å deklarere en variabel i programmer.
- Den vil bruke nøkkelordet 'TYPE' for å instruere kompilatoren om at den oppretter den nye datatypen.
- Den kan opprettes på "databasenivå" som kan lagres som databaseobjekter, brukes over hele databasen eller den kan opprettes på "underprogramnivåer", som bare er synlig i underprogrammene.
- Databasenivåposttypen kan også deklareres for tabellkolonnene slik at enkeltkolonnen kan inneholde komplekse data.
- Dataene i disse datatypene kan nås ved å referere til deres variabelnavn etterfulgt av periodeoperator (.) etterfulgt av kolonnenavn dvs. ' . '
Syntaks for erklæring på databasenivå:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
I den første syntaksen kan vi se nøkkelordet 'CREATE TYPE' dette instruerer kompilatoren til å lage posttypen kalt "type_name_db" med den spesifiserte kolonnen som et databaseobjekt.
Dette er gitt som en individuell uttalelse og ikke i noen blokk.
Syntaks for erklæring på underprogramnivå:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
I syntaksen oppretter vi posttypen med navnet "type_name" bare inne i underprogrammet.
I begge deklarasjonsmetodene er måten å definere kolonnen og datatypen på lik.
Eksempel 1: RECORD Type som databaseobjekt
I dette programmet skal vi se hvordan du lager "Record type" som et databaseobjekt. Vi skal lage posttype 'emp_det' med fire kolonner. Kolonnene og deres datatype er som følger:
- 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
Kodeforklaring:
- Koden ovenfor vil lage typen emp_det som et databaseobjekt.
- Den vil ha 4 kolonner emp_no, emp_name, manager og lønn som definert.
- Nå ligner 'emp_det' på andre data-type (som NUMBER, VARCHAR@, etc.) Og det er synlig i hele databasen. Derfor kan dette brukes i hele databasen for å deklarere variabelen av denne typen.
Utgang:
Opprettet typen 'emp_det' som posttype på databasenivå.
Eksempel 2: Opptakstype på underprogramnivå - Kolonnenivåtilgang
I dette eksemplet skal vi se hvordan du oppretter en posttype på underprogramnivå og hvordan du fyller ut og henter verdiene fra den etter kolonnenivå.
Vi skal lage 'emp_det' record_type på underprogramnivå, og vi skal bruke den samme til å fylle ut og vise data fra den.
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
Kodeforklaring:
- Kodelinje 2-8: Posttype 'emp_det' er deklarert med kolonnene emp_no, emp_name, lønn og manager av datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
- Kodelinje 9: guru99_emp_rec variabel er erklært som 'emp_det' datatype. Nå dette variabel kan inneholde verdien som inneholder alle de 4 feltene/kolonnene ovenfor.
- Kodelinje 11: Fyller "emp_no"-feltet til "guru99_emp_rec" med verdien 1001.
- Kodelinje 12: Fyller "emp_name"-feltet til "guru99_emp_rec" med verdien XXX.
- Kodelinje 13: Fyller "manager"-feltet til "guru99_emp_rec" med verdi 1000.
- Kodelinje 14: Fyller "lønn"-feltet til "guru99_emp_rec" med verdi 10000.
- Kodelinje 15-19: Viser verdien til 'guru99_emp_rec' i utdata.
Eksempel 3: Opptakstype på underprogramnivå-radnivåtilgang
I dette eksemplet skal vi se hvordan du oppretter en posttype på underprogramnivå og hvordan du fyller den ut som et radnivå. Vi skal lage 'emp_det' record_type på underprogramnivå, og vi skal bruke den samme til å fylle ut og vise data fra den.
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME YARCHAR2( 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; /
Kodeforklaring:
- Kodelinje 2-8: Posttype 'emp_det' er deklarert med kolonnene emp_no, emp_name, lønn og manager av datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
- Kodelinje 9: guru99_emp_rec variabel er erklært som 'emp_det' datatype. Nå kan denne variabelen inneholde verdien som inneholder alle de 4 feltene/kolonnene ovenfor.
- Kodelinje 11: Fylle tabellen emp med data 1002 som emp_no, YYY som emp_name, 15000 som lønn og 1000 som ledernummer.
- Kodelinje 12: Begår innsettingstransaksjonen ovenfor.
- Kodelinje 13: Fylle ut 'guru99_emp_rec'-variabelen som data på radnivå fra utvalgsspørringen for ansatt nummer 1002.
- Kodelinje 15-19: Viser verdien til 'guru99_emp_rec' i utdata.
Utgang:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
OBS: Posttypen kan kun nås på kolonnenivå mens verdien omdirigeres til en hvilken som helst utdatamodus.