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:

Oracle PL/SQL Records Type

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:

Oracle PL/SQL Records Type

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

Kodeforklaring:

  • 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.

Oracle PL/SQL Records Type

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

Kodeforklaring:

  • Kodelinje 2-8: Record type 'emp_det' er deklareret med kolonnerne emp_no, emp_name, løn og manager af datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Kodelinje 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.
  • Kodelinje 11: Udfylder "emp_no"-feltet for "guru99_emp_rec" med værdien 1001.
  • Kodelinje 12: Udfylder feltet 'emp_name' for 'guru99_emp_rec' med værdien XXX.
  • Kodelinje 13: Udfylder 'manager'-feltet for 'guru99_emp_rec' med værdien 1000.
  • Kodelinje 14: Udfylder feltet 'løn' for 'guru99_emp_rec' med værdien 10000.
  • Kodelinje 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.

Oracle PL/SQL Records Type

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: Record type 'emp_det' er deklareret med kolonnerne emp_no, emp_name, løn og manager af datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Kodelinje 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.
  • Kodelinje 11: Udfyldning af tabellen emp med data 1002 som emp_no, YYY som emp_name, 15000 som løn og 1000 som ledernummer.
  • Kodelinje 12: Begår ovenstående indsættelsestransaktion.
  • Kodelinje 13: Udfyldning af variabelen 'guru99_emp_rec' som data på rækkeniveau fra udvalgsforespørgslen for medarbejder nummer 1002.
  • Kodelinje 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.