Type Oracle PL / SQL-records met voorbeelden

Inhoudsopgave:

Anonim

Wat is recordtype?

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

  • Het groepeert een of meer kolommen om een ​​nieuw gegevenstype te vormen
  • Deze kolommen hebben een eigen naam en gegevenstype
  • Een recordtype kan de gegevens accepteren
    • Als een enkel record dat uit veel kolommen OF bestaat
    • Het kan de waarde voor een bepaalde kolom van een record accepteren
  • Recordtype betekent simpelweg een nieuw gegevenstype. Zodra het recordtype is gemaakt, wordt het opgeslagen als een nieuw gegevenstype in de database en hetzelfde wordt gebruikt om een ​​variabele in programma's te declareren.
  • Het zal het sleutelwoord 'TYPE' gebruiken om de compiler te instrueren dat het het nieuwe gegevenstype aan het maken is.
  • Het kan worden gemaakt op " databaseniveau", dat kan worden opgeslagen als databaseobjecten, overal in de database kan worden gebruikt of het kan worden gemaakt op de " subprogrammaniveaus" , die alleen zichtbaar zijn binnen de subprogramma's.
  • Het recordtype op databaseniveau kan ook worden gedeclareerd voor de tabelkolommen, zodat een enkele kolom de complexe gegevens kan bevatten.
  • De gegevens in dit gegevenstype zijn toegankelijk door te verwijzen naar hun variabele_naam gevolgd door de periodoperator (.) Gevolgd door kolomnaam, dwz '. '

Syntaxis voor declaratie op databaseniveau:

CREATE TYPE  IS RECORD( ,);

In de eerste syntaxis kunnen we het trefwoord 'CREATE TYPE' zien, wat de compiler instrueert om het recordtype met de naam "type_name_db" te maken met de opgegeven kolom als een databaseobject.

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

Syntaxis voor declaratie op subprogrammaniveau:

DECLARETYPE  IS RECORD( ,);BEGIN;END;

In de syntaxis creëren we het recordtype met de naam "type_name" alleen binnen het subprogramma.

In beide declaratiemethoden is de manier om de kolom en het gegevenstype te definiëren vergelijkbaar.

Voorbeeld 1: RECORD Typ als databaseobject

In dit programma gaan we zien hoe we een "recordtype" als een databaseobject kunnen maken. We gaan recordtype 'emp_det' maken met vier kolommen. De kolommen en hun gegevenstype zijn als volgt:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • MANAGER (AANTAL)
  • SALARIS (AANTAL)
CREATE TYPE emp_det IS OBJECT(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);/
Uitgang:
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 een ander gegevenstype (zoals NUMBER, VARCHAR @, enz.) 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.

Uitgang:

Het type 'emp_det' aangemaakt als recordtype op databaseniveau.

Voorbeeld 2: recordtype op subprogrammaniveau - toegang op kolomniveau

In dit voorbeeld gaan we zien hoe we een recordtype op subprogrammaniveau kunnen maken en hoe we de waarden eruit kunnen vullen en ophalen op kolomniveau.

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

DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);guru99_emp_rec emp_det;BEGINguru99_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;/

Uitgang:

Employee DetailEmployee Number: 1001Employee Name: XXXEmployee Salary: 10000Employee Manager Number: 1000

Code Verklaring:

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

Voorbeeld 3: recordtype op subprogrammaniveau - toegang op rijniveau

In dit voorbeeld gaan we zien hoe we een recordtype op subprogrammaniveau kunnen maken en hoe we dit op rijniveau kunnen 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.

DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME YARCHAR2( 150),MANAGER NUMBER,SALARY NUMBER);guru99_emp_rec emp_det;BEGININSERT 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 datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Coderegel 9: variabele guru99_emp_rec wordt gedeclareerd als gegevenstype 'emp_det'. Nu kan deze variabele de waarde bevatten die alle bovenstaande 4 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 manager nummer.
  • Coderegel 12: Het uitvoeren 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 de 'guru99_emp_rec' in uitvoer.

Uitgang:

Employee DetailEmployee Number: 1002Employee Name: YYYEmployee Salary: 1000Employee Manager Number: 15000

Opmerking: het recordtype is alleen toegankelijk op kolomniveau, terwijl de waarde wordt omgeleid naar een willekeurige uitvoermodus.