Oracle PL/SQL-posttyp med exempel

โšก Smart sammanfattning

PL/SQL-posttypen รคr en komplex datatyp som grupperar flera kolumner, var och en med sitt eget namn och datatyp, till en ny typ. En post kan definieras pรฅ databasnivรฅ som ett lagrat objekt eller inuti ett underprogram, och dess fรคlt nรฅs med punktoperatorn.

  • ๐Ÿงฑ Definition: En posttyp grupperar en eller flera kolumner till en enda ny datatyp.
  • ๐Ÿ”‘ Nyckelord: Nyckelordet TYPE anger fรถr kompilatorn att en ny datatyp skapas.
  • ๐Ÿ›๏ธ Tvรฅ nivรฅer: En post pรฅ databasnivรฅ รคr ett lagrat objekt; en post pรฅ underprogramnivรฅ รคr bara synlig inuti det underprogrammet.
  • ๐Ÿ”— Fรคltรฅtkomst: Fรคlt nรฅs som record_variable.column_name med hjรคlp av punktoperatorn.
  • ๐Ÿ“ฅ Kolumnnivรฅ: Vรคrden kan tilldelas ett fรคlt รฅt gรฅngen.
  • ๐Ÿ“ฆ Radnivรฅ: En SELECT INTO kan fylla en hel post frรฅn en tabellrad.
  • ๐Ÿงฉ Typer av inspelningar: Tabellbaserade %ROWTYPE, markรถrbaserade %ROWTYPE och programmerardefinierade poster.

Oracle PL/SQL Records Type

Vad รคr en posttyp?

En posttyp รคr en komplex datatyp som gรถr det mรถjligt fรถr programmeraren att skapa en ny datatyp med รถnskad kolumnstruktur. Dess huvudsakliga egenskaper รคr:

  • Den grupperar en eller flera kolumner fรถr att bilda en ny datatyp.
  • Var och en av dessa kolumner har sitt eget namn och sin egen datatyp.
  • En posttyp kan acceptera data som en enda post bestรฅende av mรฅnga kolumner, eller sรฅ kan den acceptera vรคrdet fรถr en viss kolumn i en post.
  • En posttyp รคr helt enkelt en ny datatyp. Nรคr den vรคl skapats lagras den som en ny datatyp och kan anvรคndas fรถr att deklarera en variabel i program.
  • Den anvรคnder nyckelordet 'TYP' fรถr att instruera kompilatorn att en ny datatyp skapas.
  • Den kan skapas vid databasnivรฅ, lagras som ett databasobjekt och anvรคnds i hela databasen, eller vid delprogramnivรฅ, endast synlig inuti underprogrammet.
  • En posttyp pรฅ databasnivรฅ kan ocksรฅ deklareras fรถr tabellkolumner, sรฅ att en enda kolumn kan innehรฅlla komplex data.
  • Data nรฅs genom att referera till variabelnamnet, sedan en periodoperator (.) och sedan kolumnnamnet, som ' . '.

Syntax fรถr att deklarera en posttyp

Syntax fรถr deklaration pรฅ databasnivรฅ:

Posttypdeklaration pรฅ databasnivรฅ

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

I den fรถrsta syntaxen instruerar nyckelordet 'CREATE TYPE' kompilatorn att skapa posttypen med namnet "type_name_db" med de angivna kolumnerna som ett databasobjekt. Detta ges som ett individuellt kommando, inte inuti nรฅgot block.

Syntax fรถr deklaration pรฅ delprogramnivรฅ:

Posttypdeklaration pรฅ delprogramnivรฅ

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

I den hรคr syntaxen skapar vi posttypen med namnet "typnamn" endast inuti underprogrammet. I bรฅda metoderna รคr sรคttet att definiera kolumnen och datatypen likartat.

Exempel 1: Posttyp som ett databasobjekt

I det hรคr programmet ser vi hur man skapar en posttyp som ett databasobjekt. Vi skapar posttypen 'emp_det' med fyra kolumner. Kolumnerna och deras datatyper รคr:

  • 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

Code Fรถrklaring

  • Ovanstรฅende kod skapar typen emp_det som ett databasobjekt.
  • Den har fyra kolumner: anstรคllningsnummer, anstรคllningsnamn, chef och lรถn, enligt definitionen.
  • Nu liknar 'emp_det' alla andra data typ (som NUMBER eller VARCHAR2) och รคr synlig i hela databasen. Dรคrfรถr kan den anvรคndas var som helst i databasen fรถr att deklarera en variabel av denna typ.

Exempel 2: Delprogramnivรฅ, รฅtkomst pรฅ kolumnnivรฅ

I det hรคr exemplet ser vi hur man skapar en posttyp pรฅ underprogramnivรฅ och hur man fyller i och hรคmtar vรคrden frรฅn den kolumnvis. Vi skapar posttypen 'emp_det' pรฅ underprogramnivรฅ och anvรคnder den fรถr att fylla i och visa data.

Exempel pรฅ รฅtkomst pรฅ kolumnnivรฅ fรถr posttyp

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

Code Fรถrklaring

  • Code rad 2-8: Posttypen 'emp_det' deklareras med kolumnerna emp_no, emp_name, manager och salary av datatyperna NUMBER, VARCHAR2, NUMBER och NUMBER.
  • Code rad 9: Variabeln guru99_emp_rec deklareras som datatypen 'emp_det'. Detta variabel kan innehรฅlla ett vรคrde som innehรฅller alla fyra fรคlt.
  • Code rad 11: Fyller pรฅ 'emp_no'-fรคltet fรถr 'guru99_emp_rec' med vรคrdet 1001.
  • Code rad 12: Fyller fรคltet 'emp_name' med vรคrdet XXX.
  • Code rad 13: Fyll i fรคltet 'chef' med vรคrdet 1000.
  • Code rad 14: Fyll i fรคltet 'lรถn' med vรคrdet 10000.
  • Code rad 15-19: Visar vรคrdet fรถr 'guru99_emp_rec' i utdata.

Exempel 3: Delprogramnivรฅ, รฅtkomst pรฅ radnivรฅ

I det hรคr exemplet ser vi hur man skapar en posttyp pรฅ underprogramnivรฅ och fyller i den pรฅ radnivรฅ. Vi skapar posttypen 'emp_det' pรฅ underprogramnivรฅ och anvรคnder den fรถr att fylla i och visa data.

Exempel pรฅ รฅtkomst pรฅ radnivรฅ fรถr posttyp

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(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 Fรถrklaring

  • Code rad 2-8: Posttypen 'emp_det' deklareras med kolumnerna emp_no, emp_name, manager och salary av datatyperna NUMBER, VARCHAR2, NUMBER och NUMBER.
  • Code rad 9: Variabeln guru99_emp_rec deklareras som datatypen 'emp_det' och kan innehรฅlla alla fyra fรคlt.
  • Code rad 11: Fyll tabellen anstรคllning med 1002 som anstรคllningsnummer, YYY som anstรคllningsnamn, 15000 som lรถn och 1000 som chefsnummer.
  • Code rad 12: Begรฅr infogningstransaktionen.
  • Code rad 13: Fyller variabeln 'guru99_emp_rec' pรฅ radnivรฅ frรฅn urvalsfrรฅgan fรถr anstรคllningsnummer 1002.
  • Code rad 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: En posttyp kan endast nรฅs pรฅ kolumnnivรฅ nรคr dess vรคrde omdirigeras till valfritt utdatalรคge. Observera att i det hรคr exemplet matchar SELECT-listordningen inte postfรคltordningen, vilket รคr anledningen till att lรถn- och chefsvรคrdena visas omvรคxlande i utdata.

Typer av PL/SQL-poster

Utรถver den programmerardefinierade posten som visas ovan, Oracle erbjuder tvรฅ fรถrankrade posttyper som kopierar sin struktur automatiskt. Genom att anvรคnda dem undviker man att deklarera om kolumner och posten hรฅlls i takt med tabellen eller markรถren den baseras pรฅ.

Skivtyp Deklarerad med Strukturen kommer frรฅn
Tabellbaserad post tabellnamn%ROWTYPE Alla kolumner i en tabell
Markรถrbaserad post markรถrnamn%ROWTYPE Markรถrens vallista
Programmerardefinierad post TYP โ€ฆ ร„R POST Kolumner du listar manuellt

En %ROWTYPE-post รคr det sรคkraste valet nรคr formen ska fรถlja en tabell eller en markรถren, eftersom en kolumnรคndring registreras automatiskt vid nรคsta kompilering.

Vanliga frรฅgor

En post grupperar olika kolumner av eventuellt olika typer i en radliknande struktur. En samling innehรฅller mรฅnga element av samma typ indexerade av ett index. De kombineras ofta, en samling av poster.

%ROWTYPE deklarerar en post vars fรคlt matchar en tabell eller markรถr automatiskt. Anvรคnd den nรคr posten ska spegla den kรคllan, sรฅ att en kolumnรคndring รฅterspeglas utan att deklarationen redigeras.

Ja, om bรฅda posterna รคr av samma typ. SELECT INTO kan ocksรฅ fylla en hel post frรฅn en tabellrad, fรถrutsatt att SELECT-listordningen matchar postens fรคltordning.

Ja. AI kan lรคsa en tabelldefinition och skapa ett matchande TYPE โ€ฆ IS RECORD-block, eller rekommendera en %ROWTYPE dรคr en direktlรคnk till tabellen รคr att fรถredra. Verifiera datatyper fรถre anvรคndning.

En post pรฅ databasnivรฅ skapas med CREATE TYPE och lagras som ett objekt som รคr synligt i databasen. En post pรฅ underprogramnivรฅ deklareras inuti ett block och existerar endast inom det underprogrammet.

Sammanfatta detta inlรคgg med: