Oracle PL/SQL Records Type med eksempler
Hvad er Record Type?
En posttype er en kompleks datatype, som gรธr det muligt for programmรธren at oprette en ny datatype med den รธnskede kolonnestruktur.
- Den grupperer en eller flere kolonner for at danne en ny datatype
- Disse kolonner vil have sit eget navn og datatype
- En posttype kan acceptere dataene
- Som en enkelt post, der bestรฅr af mange kolonner ELLER
- Den kan acceptere vรฆrdien for en bestemt kolonne i en post
- Record type betyder blot en ny datatype. Nรฅr posttypen er oprettet, vil den blive gemt som en ny datatype i databasen, og den samme skal bruges til at erklรฆre en variabel i programmer.
- Det vil bruge sรธgeordet 'TYPE' for at instruere compileren om, at den opretter den nye datatype.
- Den kan oprettes pรฅ "databaseniveau" som kan gemmes som databaseobjekter, bruges overalt i databasen, eller den kan oprettes pรฅ "underprogramniveauer", som kun er synlig inde i underprogrammerne.
- Databaseniveauposttypen kan ogsรฅ erklรฆres for tabelkolonnerne, sรฅ en enkelt kolonne kan indeholde de komplekse data.
- Dataene i disse datatyper kan tilgรฅs ved at henvise til deres variabelnavn efterfulgt af periodeoperator (.) efterfulgt af kolonnenavn dvs. ' . '
Syntaks for erklรฆring pรฅ databaseniveau:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
I den fรธrste syntaks kan vi se nรธgleordet 'CREATE TYPE', dette instruerer compileren om at oprette posttypen med navnet "type_name_db" med den angivne kolonne som et databaseobjekt.
Dette er givet som en individuel erklรฆring og ikke inde i en blok.
Syntaks for deklaration pรฅ underprogramniveau:
DECLARE TYPE <type_name> IS RECORD ( <columnl> <datatype>, ); BEGIN <execution_section>; END;
I syntaksen opretter vi posttypen med navnet "type_name" kun inde i underprogrammet.
I begge deklarationsmetoder er mรฅden at definere kolonnen og datatypen pรฅ ens.
Eksempel 1: RECORD Type som databaseobjekt
I dette program skal vi se, hvordan du opretter "Record type" som et databaseobjekt. Vi vil oprette posttypen 'emp_det' med fire kolonner. Kolonnerne og deres datatype er som fรธlger:
- EMP_NO (NUMBER)
- EMP_NAME (VARCHAR2 (150))
- MANAGER (NUMBER)
- LรN (ANTAL)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
Output:
Type created
Code Forklaring:
- Ovenstรฅende kode vil oprette typen emp_det som et databaseobjekt.
- Det vil have 4 kolonner emp_no, emp_name, manager og lรธn som defineret.
- Nu ligner 'emp_det' en anden datatype (som NUMBER, VARCHAR@ osv.) Og det er synligt i hele databasen. Derfor kan dette bruges i hele databasen til at erklรฆre variablen af โโdenne type.
Output:
Oprettede typen 'emp_det' som posttype pรฅ databaseniveau.
Eksempel 2: Optagelsestype pรฅ underprogramniveau- Adgang til kolonneniveau
I dette eksempel skal vi se, hvordan man opretter en posttype pรฅ underprogramniveau, og hvordan man udfylder og henter vรฆrdierne fra den efter kolonneniveau.
Vi vil oprette 'emp_det' record_type pรฅ underprogramniveau, og vi vil bruge det samme til at udfylde og vise data fra det.
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;
/
Output:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code Forklaring:
- Code linje 2-8: Record type 'emp_det' er deklareret med kolonnerne emp_no, emp_name, lรธn og manager af datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
- Code linje 9: guru99_emp_rec variabel er erklรฆret som 'emp_det' datatype. Nu dette variabel kan indeholde vรฆrdien, der indeholder alle ovenstรฅende 4 felter/kolonner.
- Code linje 11: Udfylder "emp_no"-feltet for "guru99_emp_rec" med vรฆrdien 1001.
- Code linje 12: Udfylder feltet 'emp_name' for 'guru99_emp_rec' med vรฆrdien XXX.
- Code linje 13: Udfylder 'manager'-feltet for 'guru99_emp_rec' med vรฆrdien 1000.
- Code linje 14: Udfylder feltet 'lรธn' for 'guru99_emp_rec' med vรฆrdien 10000.
- Code linje 15-19: Viser vรฆrdien af โโ'guru99_emp_rec' i output.
Eksempel 3: Optagelsestype pรฅ underprogramniveau-Rรฆkkeniveauadgang
I dette eksempel skal vi se, hvordan man opretter en posttype pรฅ underprogramniveau, og hvordan man udfylder den som et rรฆkkeniveau. Vi vil oprette 'emp_det' record_type pรฅ underprogramniveau, og vi vil bruge det samme til at udfylde og vise data fra det.
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; /
Code Forklaring:
- Code linje 2-8: Record type 'emp_det' er deklareret med kolonnerne emp_no, emp_name, lรธn og manager af datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
- Code linje 9: guru99_emp_rec variabel er erklรฆret som 'emp_det' datatype. Nu kan denne variabel indeholde den vรฆrdi, der indeholder alle ovenstรฅende 4 felter/kolonner.
- Code linje 11: Udfyldning af tabellen emp med data 1002 som emp_no, YYY som emp_name, 15000 som lรธn og 1000 som ledernummer.
- Code linje 12: Begรฅr ovenstรฅende indsรฆttelsestransaktion.
- Code linje 13: Udfyldning af variabelen 'guru99_emp_rec' som data pรฅ rรฆkkeniveau fra udvalgsforespรธrgslen for medarbejder nummer 1002.
- Code linje 15-19: Viser vรฆrdien af โโ'guru99_emp_rec' i output.
Output:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
Bemรฆrk: Registreringstypen kan kun tilgรฅs pรฅ kolonneniveau, mens dens vรฆrdi omdirigeres til enhver outputtilstand.




