Oracle PL/SQL Records Type med eksempler

Hva er posttype?

En posttype er en kompleks datatype som lar programmereren lage en ny datatype med รธnsket kolonnestruktur.

  • Den grupperer รฉn eller flere kolonner for รฅ danne en ny datatype
  • Disse kolonnene vil ha sitt eget navn og datatype
  • En posttype kan godta dataene
    • Som en enkelt post som bestรฅr av mange kolonner ELLER
    • Den kan godta verdien for en bestemt kolonne i en post
  • Record type betyr ganske enkelt en ny datatype. Nรฅr posttypen er opprettet, vil den bli lagret som en ny datatype i databasen og den samme skal brukes til รฅ deklarere en variabel i programmer.
  • Den vil bruke nรธkkelordet 'TYPE' for รฅ instruere kompilatoren om at den oppretter den nye datatypen.
  • Den kan opprettes pรฅ "databasenivรฅ" som kan lagres som databaseobjekter, brukes over hele databasen eller den kan opprettes pรฅ "underprogramnivรฅer", som bare er synlig i underprogrammene.
  • Databasenivรฅposttypen kan ogsรฅ deklareres for tabellkolonnene slik at enkeltkolonnen kan inneholde komplekse data.
  • Dataene i disse datatypene kan nรฅs ved รฅ referere til deres variabelnavn etterfulgt av periodeoperator (.) etterfulgt av kolonnenavn dvs. ' . '

Syntaks for erklรฆring pรฅ databasenivรฅ:

Oracle Type PL/SQL-poster

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

I den fรธrste syntaksen kan vi se nรธkkelordet 'CREATE TYPE' dette instruerer kompilatoren til รฅ lage posttypen kalt "type_name_db" med den spesifiserte kolonnen som et databaseobjekt.

Dette er gitt som en individuell uttalelse og ikke i noen blokk.

Syntaks for erklรฆring pรฅ underprogramnivรฅ:

Oracle Type PL/SQL-poster

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

I syntaksen oppretter vi posttypen med navnet "type_name" bare inne i underprogrammet.

I begge deklarasjonsmetodene er mรฅten รฅ definere kolonnen og datatypen pรฅ lik.

Eksempel 1: RECORD Type som databaseobjekt

I dette programmet skal vi se hvordan du lager "Record type" som et databaseobjekt. Vi skal lage posttype 'emp_det' med fire kolonner. Kolonnene og deres datatype er som fรธlger:

  • EMP_NO (NUMBER)
  • EMP_NAME (VARCHAR2 (150))
  • MANAGER (NUMBER)
  • Lร˜NN (ANTALL)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER 
);
/

Utgang:

Type created

Code Forklaring:

  • Koden ovenfor vil lage typen emp_det som et databaseobjekt.
  • Den vil ha 4 kolonner emp_no, emp_name, manager og lรธnn som definert.
  • Nรฅ ligner 'emp_det' pรฅ andre data-type (som NUMBER, VARCHAR@, etc.) Og det er synlig i hele databasen. Derfor kan dette brukes i hele databasen for รฅ deklarere variabelen av denne typen.

Utgang:

Opprettet typen 'emp_det' som posttype pรฅ databasenivรฅ.

Eksempel 2: Opptakstype pรฅ underprogramnivรฅ - Kolonnenivรฅtilgang

I dette eksemplet skal vi se hvordan du oppretter en posttype pรฅ underprogramnivรฅ og hvordan du fyller ut og henter verdiene fra den etter kolonnenivรฅ.

Vi skal lage 'emp_det' record_type pรฅ underprogramnivรฅ, og vi skal bruke den samme til รฅ fylle ut og vise data fra den.

Oracle Type PL/SQL-poster

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

Utgang:

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

Code Forklaring:

  • Code linje 2โ€“8: Posttype 'emp_det' er deklarert med kolonnene emp_no, emp_name, lรธnn og manager av datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Code linje 9: guru99_emp_rec variabel er erklรฆrt som 'emp_det' datatype. Nรฅ dette variabel kan inneholde verdien som inneholder alle de 4 feltene/kolonnene ovenfor.
  • Code linje 11: Fyller "emp_no"-feltet til "guru99_emp_rec" med verdien 1001.
  • Code linje 12: Fyller "emp_name"-feltet til "guru99_emp_rec" med verdien XXX.
  • Code linje 13: Fyller "manager"-feltet til "guru99_emp_rec" med verdi 1000.
  • Code linje 14: Fyller "lรธnn"-feltet til "guru99_emp_rec" med verdi 10000.
  • Code linje 15โ€“19: Viser verdien til 'guru99_emp_rec' i utdata.

Eksempel 3: Opptakstype pรฅ underprogramnivรฅ-radnivรฅtilgang

I dette eksemplet skal vi se hvordan du oppretter en posttype pรฅ underprogramnivรฅ og hvordan du fyller den ut som et radnivรฅ. Vi skal lage 'emp_det' record_type pรฅ underprogramnivรฅ, og vi skal bruke den samme til รฅ fylle ut og vise data fra den.

Oracle Type PL/SQL-poster

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 Forklaring:

  • Code linje 2โ€“8: Posttype 'emp_det' er deklarert med kolonnene emp_no, emp_name, lรธnn og manager av datatype NUMBER, VARCHAR2, NUMBER, NUMBER.
  • Code linje 9: guru99_emp_rec variabel er erklรฆrt som 'emp_det' datatype. Nรฅ kan denne variabelen inneholde verdien som inneholder alle de 4 feltene/kolonnene ovenfor.
  • Code linje 11: Fylle tabellen emp med data 1002 som emp_no, YYY som emp_name, 15000 som lรธnn og 1000 som ledernummer.
  • Code linje 12: Begรฅr innsettingstransaksjonen ovenfor.
  • Code linje 13: Fylle ut 'guru99_emp_rec'-variabelen som data pรฅ radnivรฅ fra utvalgsspรธrringen for ansatt nummer 1002.
  • Code linje 15โ€“19: Viser verdien til 'guru99_emp_rec' i utdata.

Utgang:

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

OBS: Posttypen kan kun nรฅs pรฅ kolonnenivรฅ mens verdien omdirigeres til en hvilken som helst utdatamodus.

Oppsummer dette innlegget med: