sql >> Databasteknik >  >> RDS >> Oracle

Vad är PLSQL-poster i Oracle

Oracle PLSQL-poster

  • PLSQL-poster är sammansatta datatyper. Det är en grupp relaterade dataobjekt som fält, vart och ett med sitt eget namn och datatyp.
  • PL/SQL-poster liknar strukturen på en rad i en databastabell. Varje skalär datatyp i posten har ett värde.
  • En post består av komponenter av valfri skalär, PL/SQL-post eller PL/SQL-tabelltyp.
  • De kan manipuleras som en enda enhet. Poster kan ha så många fält som krävs.

Hur man deklarerar Oracle PLSQL-poster

( A)Användardefinierad PLSQL-post

DECLARE TYPE employee_record_type IS RECORD 
 (emp_id NUMBER(10) NOT NULL,
 dept_no dept.deptno%TYPE,
 nаme varchar2(20),
 hire_dаte DATE := SYSDATE
 Last_name varchar2(20)
 );
 employee_record employee_record_type;

(1) Det finns inga fördefinierade datatyper för Record som det finns för den skalära datatypen. Så du måste skapa först och sedan tilldela

(2) Varje fält i posten har ett unikt namn och en specifik datatyp

(3) %TYPE används för att deklarera en variabel som är av samma typ som en angiven tabells kolumn.

(4) vi använder TYP . . . RECORD-sats för att skapa din egen posttyp är när ett fält i din post måste vara en PL/SQL-specifik typ, såsom BOOLEAN. Om du använder %ROWTYPE kommer datatyperna för alla fält att vara begränsade till SQL-typer

(5) Poster är i sig själva PL/SQL-specifika datatyper, så en annan trevlig egenskap hos användardefinierade posttyper är att du kan definiera en posttyp som ett fält i en annan posttyp

DECLARE 
 TYPE emp_phone IS RECORD
 (
 Stdcode      PLS_INTEGER,
 phn_number   PLS_INTEGER,
 extension    PLS_INTEGER
 );
 TYPE contact_phone IS RECORD
 (
 day_phone#    emp_phone,
 eve_phone#    emp_phone,
 cell_phone#   emp_phone
 );
 sales_rep contact_phone;

B) Vi kan också definiera spela in som tabellradstyp

DEKLARE sales_data_rec apps.sales_data%ROWTYPE;

1) Detta tillåter oss att deklarera en post baserat på samlingen av kolumnen i tabellen eller vyn

2) Vi använder prefixet %ROWTYPE med databastabellen för att deklarera det

3) Fält i posten hämtar deras namn och datatyp från tabellens kolumn

C) Vi kan också använda %ROWTYPE för att deklarera en post som har samma struktur som en SELECT-sats i en markör.

Detta är särskilt användbart för att hämta antingen en delmängd av kolumner från en tabell eller kolumner från flera tabeller.

DECLARE 
 CURSOR emp_cur
 IS
 SELECT lastname, age,firstname FROM employees;
 l_employee   emp_cur%ROWTYPE;

Närhelst du hämtar data från en markör till PL/SQL-variabler, bör du deklarera en post baserad på den markören med %ROWTYPE och hämta den till den posten. På detta sätt, när och om SELECT-listan med markören ändras, kommer antalet och typen av fält i posten att ändras i enlighet med detta och allt kommer att förbli synkroniserat.

Hur man skickar värden till Oracle PLSQL-poster

Syntax Användning
rec_name.col_name :=värde; Att tilldela ett värde direkt till en specifik kolumn i en post.
rec_name.column_name :=värde; För att direkt tilldela ett värde till en specifik kolumn i en post, om posten deklareras med %ROWTYPE.
VÄLJ kolumn1, kolumn2 INTO rec_name.col_name1, rec_name.col_name2 FROM table_name [WHERE-sats]; Att tilldela värden till varje fält i en post från databastabellen.
VÄLJ * INTO postnamn FRÅN tabellnamn [WHERE-sats]; Att tilldela ett värde till alla fält i posten från en databastabell.
variabelnamn :=postnamn.kolnamn; För att hämta ett värde från en postkolumn och tilldela det till en variabel.

Du måste läsa dessa  andra PLSQL-inlägg

Oracle PLSQL-blockstruktur och -typer
Oracle plsql-intervjufrågor
Snabbtutorials för Oracle sql och plsql


  1. Utöka användningen av DBCC CLONEDATABASE

  2. Varför går SQL-id-sekvenser ur synk (särskilt med Postgres)?

  3. Min OOW15-resa är klar

  4. Hur uppgraderar jag PostgreSQL från version 9.6 till version 10.1 utan att förlora data?