Oracle PL/SQL-posttyp med exempel

Vad är posttyp?

En posttyp är en komplex datatyp som gör att programmeraren kan 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
    • Den kan acceptera värdet för en viss kolumn i en post
  • Posttyp betyder helt enkelt en ny datatyp. När posttypen har skapats kommer den att lagras som en ny datatyp i databasen och densamma ska användas för att deklarera en variabel i program.
  • Den kommer att använda nyckelordet 'TYP' för att instruera kompilatorn att den skapar den nya datatypen.
  • Det kan skapas på "databasnivå" som kan lagras som databasobjekt, användas överallt i databasen eller så kan den skapas på "underprogram nivåer”, som endast är synlig i underprogrammen.
  • Databasnivåposttypen kan också deklareras för tabellkolumnerna så att en enda kolumn kan innehålla komplexa data.
  • Data i dessa datatyper kan nås genom att referera till deras variabelnamn följt av periodoperator (.) följt av kolumnnamn dvs. . '

Syntax för deklaration på databasnivå:

Oracle PL/SQL Records Type

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

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

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

Syntax för deklaration på underprogramnivå:

Oracle PL/SQL Records Type

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

I syntaxen skapar vi posttypen med namnet "type_name" endast i underprogrammet.

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

Exempel 1: RECORD Typ som databasobjekt

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

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • MANAGER (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 kommer att skapa typen emp_det som ett databasobjekt.
  • Den kommer att ha 4 kolumner emp_no, emp_name, manager och lön enligt definition.
  • Nu är 'emp_det' en liknande till andra data typ (som NUMBER, VARCHAR@, etc.) Och det är synligt 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å databasnivå.

Exempel 2: Inspelningstyp på underprogramnivå - Kolumnnivååtkomst

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 kolumnnivå.

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

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

Produktion:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000 
Employee Manager Number: 1000

Kodförklaring:

  • Kodrad 2-8: Posttyp 'emp_det' deklareras med kolumnerna emp_no, emp_name, lön och manager av datatyp NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Kodrad 9: guru99_emp_rec variabel deklareras som 'emp_det' datatyp. Nu detta variabel kan hålla värdet som innehåller alla ovanstående 4 fält/kolumner.
  • Kodrad 11: Fyller på 'emp_no'-fältet för 'guru99_emp_rec' med värdet 1001.
  • Kodrad 12: Fyller på 'emp_name'-fältet för 'guru99_emp_rec' med värdet XXX.
  • Kodrad 13: Fyller på "manager"-fältet för "guru99_emp_rec" med värdet 1000.
  • Kodrad 14: Fyller i "lön"-fältet 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å underprogramnivå-Åtkomst på radnivå

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

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

Kodförklaring:

  • Kodrad 2-8: Posttyp 'emp_det' deklareras med kolumnerna emp_no, emp_name, lön och manager av datatyp NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Kodrad 9: guru99_emp_rec variabel deklareras som 'emp_det' datatyp. Nu kan denna variabel hå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 chefsnummer.
  • Kodrad 12: Begår ovanstående infogningstransaktion.
  • Kodrad 13: Fyller på variabeln 'guru99_emp_rec' som data på radnivå från urvalsfrågan för anställd nummer 1002.
  • Kodrad 15-19: Visar värdet för 'guru99_emp_rec' i utdata.

Produktion:

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

Obs: Posttypen kan endast nås på kolumnnivå samtidigt som dess värde omdirigeras till valfritt utdataläge.