PL/SQL 记录

本文详细介绍了PL/SQL中处理记录的各种方式,包括基于表的记录、基于游标的记录和用户定义的记录。通过示例展示了如何声明、初始化和操作这些记录,以及如何将记录作为子程序参数传递。记录类型在数据库编程中用于存储和操作结构化数据,增强了PL/SQL的灵活性和功能。
摘要由CSDN通过智能技术生成

        记录是可以容纳不同种类的数据项的数据结构。 记录由不同的字段组成,类似于数据库表的一行。

PL/SQL可以处理以下类型的记录:

  • 基于表的记录
  • 基于游标的记录
  • 用户定义的记录

基于表的记录

        %ROWTYPE属性使程序员能够创建基于表和基于游标的记录。

DECLARE
   customer_rec customers%rowtype;
BEGIN
   SELECT * into customer_rec
   FROM customers
   WHERE id = 5;
   dbms_output.put_line('客户ID: ' || customer_rec.id);
   dbms_output.put_line('客户姓名: ' || customer_rec.name);
   dbms_output.put_line('客户地址: ' || customer_rec.address);
   dbms_output.put_line('客户薪资: ' || customer_rec.salary);
END;
/

基于游标的记录

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;
/

用户定义的记录

        PL/SQL提供了一个用户定义的记录类型,允许程序员定义不同的记录结构。这些记录由不同的字段组成。

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、实例

        要访问记录的任何字段,可通过成员访问操作符(.)来访问。

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  := 'TanHao';
   book1.subject := 'C Programming Tutorial';
   book1.book_id := 1920122;

   -- Book 2 specification 
   book2.title   := 'Telecom Billing';
   book2.author  := 'LiDawei';
   book2.subject := 'Telecom Billing Tutorial'; 
   book2.book_id := 2032942;

  -- 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; 
/

将记录作为子程序参数

        可以像传递任何其他变量一样将记录作为子程序参数传递。

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 := 'HAOQIANG TANG';
   BOOK1.SUBJECT := 'C PROGRAMMING TUTORIAL';
   BOOK1.BOOK_ID := 8321407;

   -- BOOK 2 SPECIFICATION
   BOOK2.TITLE := 'TELECOM BILLING';
   BOOK2.AUTHOR := 'MAXSU';
   BOOK2.SUBJECT := 'TELECOM BILLING TUTORIAL';
   BOOK2.BOOK_ID := 921300;

   -- USE PROCEDURE TO PRINT BOOK INFO
   PRINTBOOK(BOOK1);
   PRINTBOOK(BOOK2);
END;
/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值