Учебники

PL / SQL – Записи

В этой главе мы обсудим записи в PL / SQL. Запись – это структура данных, которая может содержать элементы данных разных типов. Записи состоят из разных полей, похожих на строку таблицы базы данных.

Например, вы хотите отслеживать свои книги в библиотеке. Вы можете отслеживать следующие атрибуты каждой книги, такие как название, автор, тема, идентификатор книги. Запись, содержащая поле для каждого из этих элементов, позволяет рассматривать КНИГУ как логическую единицу и позволяет вам лучше организовывать и представлять ее информацию.

PL / SQL может обрабатывать следующие типы записей –

  • Таблица на основе
  • Курсорные записи
  • Пользовательские записи

Табличные записи

Атрибут% ROWTYPE позволяет программисту создавать записи на основе таблиц и на основе курсора .

Следующий пример иллюстрирует концепцию табличных записей. Мы будем использовать таблицу CUSTOMERS, которую мы создали и использовали в предыдущих главах –

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

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат –

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

Записи на основе курсора

Следующий пример иллюстрирует концепцию основанных на курсоре записей. Мы будем использовать таблицу CUSTOMERS, которую мы создали и использовали в предыдущих главах –

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

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат –

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

PL/SQL procedure successfully completed. 

Пользовательские записи

PL / SQL предоставляет определенный пользователем тип записи, который позволяет вам определять различные структуры записей. Эти записи состоят из разных полей. Предположим, вы хотите отслеживать свои книги в библиотеке. Вы можете отслеживать следующие атрибуты о каждой книге –

  • заглавие
  • автор
  • Предмет
  • ID книги

Определение записи

Тип записи определяется как –

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;

Книжная запись объявляется следующим образом –

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

Доступ к полям

Чтобы получить доступ к любому полю записи, мы используем оператор точки (.) . Оператор доступа к элементу закодирован как точка между именем переменной записи и полем, к которому мы хотим получить доступ. Ниже приведен пример, объясняющий использование записи:

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

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат –

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. 

Записи в качестве параметров подпрограммы

Вы можете передать запись в качестве параметра подпрограммы, как и любую другую переменную. Вы также можете получить доступ к полям записи так же, как и в предыдущем примере –

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

Когда приведенный выше код выполняется в командной строке SQL, он дает следующий результат –