一:记录
记录是一种高可以容纳不同数据类型的数据的数据结构。
PL/SQL可以处理记录的以下几种类型:
-
基于数据表
-
基于游标的记录
-
用户自定义的记录
二:使用 %ROWTYPE属性 创建基于表格或基于游标的记录【基于表、游标的记录 其实就是 数据表的一行】
1)基于表的记录
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;
2)基于游标的记录(最常用)
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;
三:用户自定义的记录:把记录当作一种数据结构来使用
1)定义记录
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;
2)声明记录变量
record_var type_name;
3)使用记录变量
record_var.attribute //访问记录中的字段 func(record_var) /记录变量做参数,传递给函数
例子:
DECLARE type books is record //定义 books 记录 (title varchar(50), author varchar(50), subject varchar(100), book_id number); book1 books; //创建两个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;