Oracle PL/SQL-recordtype met voorbeelden

Wat is recordtype?

Een recordtype is een complex gegevenstype waarmee de programmeur een nieuw gegevenstype met de gewenste kolomstructuur kan maken.

  • Het groepeert een of meer kolommen om een โ€‹โ€‹nieuw gegevenstype te vormen
  • Deze kolommen krijgen een eigen naam en gegevenstype
  • Een recordtype kan de gegevens accepteren
    • Als รฉรฉn record dat uit veel kolommen bestaat OF
    • Het kan de waarde voor een bepaalde kolom van een record accepteren
  • Recordtype betekent eenvoudigweg een nieuw gegevenstype. Zodra het recordtype is aangemaakt, wordt het als een nieuw gegevenstype in de database opgeslagen en hetzelfde wordt gebruikt om een โ€‹โ€‹variabele in programma's te declareren.
  • Er wordt gebruik gemaakt van het trefwoord 'TYPE' om de compiler te instrueren dat hij het nieuwe gegevenstype aan het maken is.
  • Het kan worden aangemaakt op โ€œdatabaseniveauโ€ die kunnen worden opgeslagen als databaseobjecten, overal in de database kunnen worden gebruikt of kunnen worden gemaakt op de โ€œsubprogrammaniveausโ€, dat alleen zichtbaar is binnen de subprogramma's.
  • Het recordtype op databaseniveau kan ook worden gedeclareerd voor de tabelkolommen, zodat รฉรฉn kolom complexe gegevens kan bevatten.
  • De gegevens in dit gegevenstype zijn toegankelijk door te verwijzen naar hun variabelenaam gevolgd door de puntoperator (.) gevolgd door kolomnaam, d.w.z. ' . '

Syntaxis voor aangifte op databaseniveau:

Oracle PL/SQL-recordtype

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

In de eerste syntaxis kunnen we het sleutelwoord 'CREATE TYPE' zien. Dit geeft de compiler de opdracht om het recordtype met de naam 'type_name_db' te maken met de opgegeven kolom als databaseobject.

Dit wordt gegeven als een individuele verklaring en niet binnen een blok.

Syntaxis voor declaratie op subprogrammaniveau:

Oracle PL/SQL-recordtype

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

In de syntaxis maken we het recordtype met de naam โ€œtype_nameโ€ alleen binnen het subprogramma aan.

Bij beide declaratiemethoden is de manier om de kolom en het gegevenstype te definiรซren vergelijkbaar.

Voorbeeld 1: RECORD-type als databaseobject

In dit programma gaan we zien hoe u โ€œRecordtypeโ€ als databaseobject kunt maken. We gaan het recordtype 'emp_det' maken met vier kolommen. De kolommen en hun gegevenstype zijn als volgt:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • BEHEERDER (NUMMER)
  • SALARIS (AANTAL)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER 
);
/

Output:

Type created

Code Uitleg:

  • De bovenstaande code maakt het type emp_det aan als een databaseobject.
  • Het heeft 4 kolommen emp_no, emp_name, manager en salaris zoals gedefinieerd.
  • Nu is 'emp_det' vergelijkbaar met andere data type (zoals NUMBER, VARCHAR@, etc.) En het is zichtbaar in de hele database. Daarom kan dit in de hele database worden gebruikt om de variabele van dit type te declareren.

Output:

Het type 'emp_det' aangemaakt als recordtype op databaseniveau.

Voorbeeld 2: Recordtype op subprogrammaniveau - Toegang op kolomniveau

In dit voorbeeld gaan we zien hoe u een recordtype op subprogrammaniveau kunt maken en hoe u de waarden daaruit op kolomniveau kunt invullen en ophalen.

We gaan 'emp_det' record_type maken op subprogrammaniveau, en we gaan hetzelfde gebruiken om er gegevens uit te vullen en weer te geven.

Oracle PL/SQL-recordtype

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 Uitleg:

  • Code regel 2-8: Recordtype 'emp_det' wordt gedeclareerd met de kolommen emp_no, emp_name, salaris en manager van gegevenstype NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Code lijn 9: guru99_emp_rec variabele wordt gedeclareerd als gegevenstype 'emp_det'. Nu dit variabele kan de waarde bevatten die alle bovenstaande 4 velden/kolommen bevat.
  • Code lijn 11: Het invullen van het veld 'emp_no' van 'guru99_emp_rec' met waarde 1001.
  • Code lijn 12: Het veld 'emp_name' van 'guru99_emp_rec' invullen met waarde XXX.
  • Code lijn 13: Het invullen van het veld 'manager' van 'guru99_emp_rec' met de waarde 1000.
  • Code lijn 14: Het invullen van het 'salaris'-veld van 'guru99_emp_rec' met waarde 10000.
  • Code regel 15-19: Weergave van de waarde van 'guru99_emp_rec' in de uitvoer.

Voorbeeld 3: Recordtype op subprogrammaniveau-toegang op rijniveau

In dit voorbeeld gaan we zien hoe u een recordtype op subprogrammaniveau kunt maken en hoe u dit op rijniveau kunt invullen. We gaan 'emp_det' record_type maken op subprogrammaniveau, en we gaan hetzelfde gebruiken om er gegevens uit te vullen en weer te geven.

Oracle PL/SQL-recordtype

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 Uitleg:

  • Code regel 2-8: Recordtype 'emp_det' wordt gedeclareerd met de kolommen emp_no, emp_name, salaris en manager van gegevenstype NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Code lijn 9: guru99_emp_rec variabele wordt gedeclareerd als gegevenstype 'emp_det'. Nu kan deze variabele de waarde bevatten die alle bovenstaande vier velden/kolommen bevat.
  • Code lijn 11: De tabel emp vullen met gegevens 1002 als emp_no, YYY als emp_name, 15000 als salaris en 1000 als managernummer.
  • Code lijn 12: Het plegen van de bovenstaande invoegtransactie.
  • Code lijn 13: Het invullen van de variabele 'guru99_emp_rec' als gegevens op rijniveau uit de selectiequery voor werknemersnummer 1002.
  • Code regel 15-19: Weergave van de waarde van 'guru99_emp_rec' in de uitvoer.

Output:

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

Let op: Het recordtype is alleen toegankelijk op kolomniveau, terwijl de waarde ervan wordt omgeleid naar een willekeurige uitvoermodus.

Vat dit bericht samen met: