В этой главе мы обсудим записи в 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, он дает следующий результат —