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