Oracle PL / SQL-posttyp med exempel

Innehållsförteckning:

Anonim

Vad är Record Type?

En posttyp är en komplex datatyp som gör det möjligt för programmeraren att skapa en ny datatyp med önskad kolumnstruktur.

  • Den grupperar en eller flera kolumner för att bilda en ny datatyp
  • Dessa kolumner kommer att ha sitt eget namn och datatyp
  • En posttyp kan acceptera data
    • Som en enda post som består av många kolumner ELLER
    • Det kan acceptera värdet för en viss kolumn i en post
  • Posttyp betyder helt enkelt en ny datatyp. När posttypen har skapats lagras den som en ny datatyp i databasen och densamma ska användas för att deklarera en variabel i program.
  • Den använder nyckelordet 'TYP' för att instruera kompilatorn att den skapar den nya datatypen.
  • Den kan skapas på " databasnivå" som kan lagras som databasobjekt, användas överallt i databasen eller den kan skapas på " underprogramnivåer" , som bara syns i underprogrammen.
  • Datatypen på databasenivå kan också deklareras för tabellkolumnerna så att enskilda kolumner kan innehålla komplexa data.
  • Data i denna datatyp kan nås genom att hänvisa till deras variabelnamn följt av periodoperatör (.) Följt av kolumnnamn, dvs '. '

Syntax för deklaration på databasnivå:

CREATE TYPE  IS RECORD( ,);

I den första syntaxen kan vi se nyckelordet 'CREATE TYPE' som instruerar kompilatorn att skapa posttypen "type_name_db" med den angivna kolumnen som databasobjekt.

Detta ges som ett individuellt uttalande och inte i något block.

Syntax för deklaration på underprogramnivå:

DECLARETYPE  IS RECORD( ,);BEGIN;END;

I syntaxen skapar vi posttypen med namnet "typnamn" bara i underprogrammet.

I båda deklarationsmetoden är sättet att definiera kolumnen och datatypen liknande.

Exempel 1: RECORD Skriv som databasobjekt

I det här programmet kommer vi att se hur man skapar "Record type" som ett databasobjekt. Vi ska skapa posttyp 'emp_det' med fyra kolumner. Kolumnerna och deras datatyp är följande:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • CHEF (NUMMER)
  • LÖN (NUMMER)
CREATE TYPE emp_det IS OBJECT(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);/
Produktion:
Type created

Kodförklaring:

  • Ovanstående kod skapar typen emp_det som ett databasobjekt.
  • Den kommer att ha fyra kolumner emp_no, emp_name, chef och lön enligt definition.
  • Nu liknar 'emp_det' andra datatyper (som NUMBER, VARCHAR @, etc.) Och det syns i hela databasen. Därför kan detta användas i hela databasen för att deklarera variabeln av denna typ.

Produktion:

Skapade typen 'emp_det' som posttyp på databasenivå.

Exempel 2: Inspelningstyp på underprogramnivå - åtkomst till kolumnnivå

I det här exemplet ska vi se hur man skapar en posttyp på underprogramnivå och hur man fyller i och hämtar värdena från den efter kolumnivå.

Vi ska skapa 'emp_det' record_type på underprogramnivå, och vi kommer att använda detsamma för att fylla ut och visa data från den.

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;/

Produktion:

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

Kodförklaring:

  • Kodrad 2-8 : Posttyp 'emp_det' deklareras med kolumner emp_no, emp_name, lön och chef för datatyp NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Kodrad 9: variabel guru99_emp_rec förklaras som datatyp 'emp_det'. Nu kan denna variabel innehålla värdet som innehåller alla ovanstående 4 fält / kolumner.
  • Kodrad 11: Fyll i fältet 'emp_no' för 'guru99_emp_rec' med värdet 1001.
  • Kodrad 12: Fyll i fältet 'emp_name' för 'guru99_emp_rec' med värdet XXX.
  • Kodrad 13: Fyll i "manager" -fältet "guru99_emp_rec" med värdet 1000.
  • Kodrad 14: Fyll i fältet 'lön' för 'guru99_emp_rec' med värdet 10000.
  • Kodrad 15-19: Visar värdet för 'guru99_emp_rec' i utdata.

Exempel 3: Inspelningstyp på subprogramnivå - radnivååtkomst

I det här exemplet ska vi se hur man skapar en posttyp på underprogramnivå och hur man fyller i den som en radnivå. Vi ska skapa 'emp_det' record_type på underprogramnivå, och vi kommer att använda detsamma för att fylla ut och visa data från den.

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;/

Kodförklaring:

  • Kodrad 2-8 : Posttyp 'emp_det' deklareras med kolumner emp_no, emp_name, lön och chef för datatyp NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Kodrad 9: variabel guru99_emp_rec förklaras som datatyp 'emp_det'. Nu kan denna variabel innehålla värdet som innehåller alla ovanstående 4 fält / kolumner.
  • Kodrad 11: Fyller tabellen emp med data 1002 som emp_no, YYY som emp_name, 15000 som lön och 1000 som manager nummer.
  • Kodrad 12: Genomför ovanstående insättningstransaktion.
  • Kodrad 13: Att fylla variabeln 'guru99_emp_rec' som en radnivådata från väljfrågan för anställd nummer 1002.
  • Kodrad 15-19: Visar värdet för 'guru99_emp_rec' i utdata.

Produktion:

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

Obs !: Posttypen kan endast nås på kolumnnivå medan dess omdirigering omdirigeras till valfritt utmatningsläge.