- PL/SQL 教程
- PL/SQL - 主页
- PL/SQL - 概述
- PL/SQL - 环境
- PL/SQL - 基本语法
- PL/SQL - 数据类型
- PL/SQL - 变量
- PL/SQL - 常量和文字
- PL/SQL - 运算符
- PL/SQL - 条件
- PL/SQL - 循环
- PL/SQL - 字符串
- PL/SQL - 数组
- PL/SQL - 过程
- PL/SQL - 函数
- PL/SQL - 游标
- PL/SQL - 记录
- PL/SQL - 异常
- PL/SQL - 触发器
- PL/SQL - 包
- PL/SQL - 集合
- PL/SQL - 事务
- PL/SQL - 日期和时间
- PL/SQL - DBMS 输出
- PL/SQL - 面向对象
- PL/SQL 有用资源
- PL/SQL - 问题与解答
- PL/SQL - 快速指南
- PL/SQL - 有用的资源
- PL/SQL - 讨论
PL/SQL - 记录
在本章中,我们将讨论 PL/SQL 中的记录。记录是一种可以保存不同类型数据项的数据结构。记录由不同的字段组成,类似于数据库表的一行。
例如,您想跟踪图书馆中的书籍。您可能想要跟踪每本书的以下属性,例如标题、作者、主题、书籍 ID。包含每个项目的字段的记录允许将书视为逻辑单元,并允许您以更好的方式组织和表示其信息。
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 提供了用户定义的记录类型,允许您定义不同的记录结构。这些记录由不同的字段组成。假设您想跟踪图书馆中的书籍。您可能想要跟踪每本书的以下属性 -
- 标题
- 作者
- 主题
- 图书编号
定义记录
记录类型定义为 -
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 提示符下执行时,会产生以下结果 -
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.