PL/SQL - 记录
在本章中,我们将讨论 PL/SQL 中的记录。 record 是一种数据结构,可以保存不同类型的数据项。 记录由不同的字段组成,类似于数据库表的一行。
例如,您想跟踪图书馆中的书籍。 您可能希望跟踪有关每本书的以下属性,例如标题、作者、主题、书籍 ID。 包含每个项目的字段的记录允许将 BOOK 视为一个逻辑单元,并允许您以更好的方式组织和表示其信息。
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 提供了一种用户定义的记录类型,允许您定义不同的记录结构。 这些记录由不同的字段组成。 假设您想跟踪图书馆中的书籍。 您可能想要跟踪关于每本书的以下属性 −
- Title
- Author
- Subject
- Book 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;
Book 记录通过以下方式声明 −
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 提示符下执行上述代码时,会产生以下结果 −
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.