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:
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:
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 Verklaring:
- 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.
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 Verklaring:
- Coderegel 2-8: Recordtype 'emp_det' wordt gedeclareerd met de kolommen emp_no, emp_name, salaris en manager van gegevenstype NUMBER, VARCHAR2, NUMBER, NUMBER.
- Coderegel 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.
- Coderegel 11: Het invullen van het veld 'emp_no' van 'guru99_emp_rec' met waarde 1001.
- Coderegel 12: Het veld 'emp_name' van 'guru99_emp_rec' invullen met waarde XXX.
- Coderegel 13: Het invullen van het veld 'manager' van 'guru99_emp_rec' met de waarde 1000.
- Coderegel 14: Het invullen van het 'salaris'-veld van 'guru99_emp_rec' met waarde 10000.
- Coderegel 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.
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 Verklaring:
- Coderegel 2-8: Recordtype 'emp_det' wordt gedeclareerd met de kolommen emp_no, emp_name, salaris en manager van gegevenstype NUMBER, VARCHAR2, NUMBER, NUMBER.
- Coderegel 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.
- Coderegel 11: De tabel emp vullen met gegevens 1002 als emp_no, YYY als emp_name, 15000 als salaris en 1000 als managernummer.
- Coderegel 12: Het plegen van de bovenstaande invoegtransactie.
- Coderegel 13: Het invullen van de variabele 'guru99_emp_rec' als gegevens op rijniveau uit de selectiequery voor werknemersnummer 1002.
- Coderegel 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
Opmerking: Het recordtype is alleen toegankelijk op kolomniveau, terwijl de waarde ervan wordt omgeleid naar een willekeurige uitvoermodus.