PL / SQL - Datensätze

In diesem Kapitel werden Datensätze in PL / SQL erläutert. EINrecordist eine Datenstruktur, die Datenelemente verschiedener Art enthalten kann. Datensätze bestehen aus verschiedenen Feldern, ähnlich einer Zeile einer Datenbanktabelle.

Sie möchten beispielsweise Ihre Bücher in einer Bibliothek verfolgen. Möglicherweise möchten Sie die folgenden Attribute für jedes Buch verfolgen, z. B. Titel, Autor, Betreff, Buch-ID. Ein Datensatz mit einem Feld für jedes dieser Elemente ermöglicht es, ein BUCH als logische Einheit zu behandeln und seine Informationen besser zu organisieren und darzustellen.

PL / SQL kann die folgenden Arten von Datensätzen verarbeiten:

  • Table-based
  • Cursor-basierte Datensätze
  • Benutzerdefinierte Datensätze

Tabellenbasierte Datensätze

Mit dem Attribut% ROWTYPE kann ein Programmierer erstellen table-based und cursorbased Aufzeichnungen.

Das folgende Beispiel veranschaulicht das Konzept von table-basedAufzeichnungen. Wir werden die CUSTOMERS-Tabelle verwenden, die wir in den vorherigen Kapiteln erstellt und verwendet haben -

DECLARE 
   customer_rec customers%rowtype; 
BEGIN 
   SELECT * into customer_rec 
   FROM customers 
   WHERE id = 5;  
   dbms_output.put_line('Customer ID: ' || customer_rec.id); 
   dbms_output.put_line('Customer Name: ' || customer_rec.name); 
   dbms_output.put_line('Customer Address: ' || customer_rec.address); 
   dbms_output.put_line('Customer Salary: ' || customer_rec.salary); 
END; 
/

Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis ausgegeben:

Customer ID: 5 
Customer Name: Hardik 
Customer Address: Bhopal 
Customer Salary: 9000 
 
PL/SQL procedure successfully completed.

Cursor-basierte Datensätze

Das folgende Beispiel veranschaulicht das Konzept von cursor-basedAufzeichnungen. Wir werden die CUSTOMERS-Tabelle verwenden, die wir in den vorherigen Kapiteln erstellt und verwendet haben -

DECLARE 
   CURSOR customer_cur is 
      SELECT id, name, address  
      FROM customers; 
   customer_rec customer_cur%rowtype; 
BEGIN 
   OPEN customer_cur; 
   LOOP 
      FETCH customer_cur into customer_rec; 
      EXIT WHEN customer_cur%notfound; 
      DBMS_OUTPUT.put_line(customer_rec.id || ' ' || customer_rec.name); 
   END LOOP; 
END; 
/

Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis ausgegeben:

1 Ramesh 
2 Khilan 
3 kaushik 
4 Chaitali 
5 Hardik 
6 Komal  

PL/SQL procedure successfully completed.

Benutzerdefinierte Datensätze

PL / SQL bietet einen benutzerdefinierten Datensatztyp, mit dem Sie die verschiedenen Datensatzstrukturen definieren können. Diese Datensätze bestehen aus verschiedenen Feldern. Angenommen, Sie möchten Ihre Bücher in einer Bibliothek verfolgen. Möglicherweise möchten Sie die folgenden Attribute für jedes Buch verfolgen:

  • Title
  • Author
  • Subject
  • Buch-ID

Datensatz definieren

Der Datensatztyp ist definiert als -

TYPE 
type_name IS RECORD 
  ( field_name1  datatype1  [NOT NULL]  [:= DEFAULT EXPRESSION], 
   field_name2   datatype2   [NOT NULL]  [:= DEFAULT EXPRESSION], 
   ... 
   field_nameN  datatypeN  [NOT NULL]  [:= DEFAULT EXPRESSION); 
record-name  type_name;

Der Buchdatensatz wird folgendermaßen deklariert:

DECLARE 
TYPE books IS RECORD 
(title  varchar(50), 
   author  varchar(50), 
   subject varchar(100), 
   book_id   number); 
book1 books; 
book2 books;

Zugriff auf Felder

Um auf ein Feld eines Datensatzes zuzugreifen, verwenden wir den Punkt (.)Operator. Der Mitgliedszugriffsoperator wird als Punkt zwischen dem Namen der Datensatzvariablen und dem Feld codiert, auf das wir zugreifen möchten. Im Folgenden finden Sie ein Beispiel zur Erläuterung der Verwendung von Datensätzen.

DECLARE 
   type books is record 
      (title varchar(50), 
      author varchar(50), 
      subject varchar(100), 
      book_id number); 
   book1 books; 
   book2 books; 
BEGIN 
   -- Book 1 specification 
   book1.title  := 'C Programming'; 
   book1.author := 'Nuha Ali ';  
   book1.subject := 'C Programming Tutorial'; 
   book1.book_id := 6495407;  
   -- Book 2 specification 
   book2.title := 'Telecom Billing'; 
   book2.author := 'Zara Ali'; 
   book2.subject := 'Telecom Billing Tutorial'; 
   book2.book_id := 6495700;  
  
  -- Print book 1 record 
   dbms_output.put_line('Book 1 title : '|| book1.title); 
   dbms_output.put_line('Book 1 author : '|| book1.author); 
   dbms_output.put_line('Book 1 subject : '|| book1.subject); 
   dbms_output.put_line('Book 1 book_id : ' || book1.book_id); 
   
   -- Print book 2 record 
   dbms_output.put_line('Book 2 title : '|| book2.title); 
   dbms_output.put_line('Book 2 author : '|| book2.author); 
   dbms_output.put_line('Book 2 subject : '|| book2.subject); 
   dbms_output.put_line('Book 2 book_id : '|| book2.book_id); 
END; 
/

Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis ausgegeben:

Book 1 title : C Programming 
Book 1 author : Nuha Ali 
Book 1 subject : C Programming Tutorial 
Book 1 book_id : 6495407 
Book 2 title : Telecom Billing 
Book 2 author : Zara Ali 
Book 2 subject : Telecom Billing Tutorial 
Book 2 book_id : 6495700  

PL/SQL procedure successfully completed.

Datensätze als Unterprogrammparameter

Sie können einen Datensatz als Unterprogrammparameter übergeben, genau wie Sie eine andere Variable übergeben. Sie können auf die Datensatzfelder auch auf dieselbe Weise zugreifen wie im obigen Beispiel -

DECLARE 
   type books is record 
      (title  varchar(50), 
      author  varchar(50), 
      subject varchar(100), 
      book_id   number); 
   book1 books; 
   book2 books;  
PROCEDURE printbook (book books) IS 
BEGIN 
   dbms_output.put_line ('Book  title :  ' || book.title); 
   dbms_output.put_line('Book  author : ' || book.author); 
   dbms_output.put_line( 'Book  subject : ' || book.subject); 
   dbms_output.put_line( 'Book book_id : ' || book.book_id); 
END; 
   
BEGIN 
   -- Book 1 specification 
   book1.title  := 'C Programming'; 
   book1.author := 'Nuha Ali ';  
   book1.subject := 'C Programming Tutorial'; 
   book1.book_id := 6495407;
   
   -- Book 2 specification 
   book2.title := 'Telecom Billing'; 
   book2.author := 'Zara Ali'; 
   book2.subject := 'Telecom Billing Tutorial'; 
   book2.book_id := 6495700;  
   
   -- Use procedure to print book info 
   printbook(book1); 
   printbook(book2); 
END; 
/

Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis ausgegeben:

Book  title : C Programming 
Book  author : Nuha Ali 
Book subject : C Programming Tutorial 
Book  book_id : 6495407 
Book title : Telecom Billing 
Book author : Zara Ali 
Book subject : Telecom Billing Tutorial 
Book book_id : 6495700  

PL/SQL procedure successfully completed.