PL/SQL学习笔记之记录

本文详细介绍了PL/SQL中的记录类型,包括基于表、基于游标的记录以及用户自定义记录。通过具体示例展示了如何定义和使用这些记录类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一:记录

    记录是一种高可以容纳不同数据类型的数据的数据结构。

    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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值