PL/SQL_使用复合数据类型1(PL/SQL记录)

定义PL/SQL记录

1、自定义PL/SQL记录
当使用自定义的PL/SQL记录时,需要分别定义PL/SQL记录类型和记录变量。定义记录类型和记录变量的语法如下:
TYPE type_name IS RECORD(
  field_declaration[,
  field_declaration]...
);
identifier type_name;
示例如下:
DECLARE
  TYPE emp_record_type IS RECORD(
    NAME emp.ename%TYPE,
    salary emp.sal%TYPE,
    deptno emp.deptno%TYPE
  );
  emp_record emp_record_type;
BEGIN
END;
2、使用%ROWTYPE属性定义记录变量
%ROWTYPE属性可以基于表或视图定义记录变量。当使用该属性定义记录变量时,记录成员的名称和类型与表或视图列的名称和类型完全相同。为了简化表或视图所有列数据的处理,应该使用该属性定义记录变量。而如果只是处理某几列数据,那么应该使用自定义记录类型和记录变量,这样可以节省内存空间。使用%ROWTYPE属性定义记录变量的语法如下:
identifier table_name%ROWTYPE;
或
identifier view_name%ROWTYPE;
使用PL/SQL记录
1、在SELECT INTO语句中使用PL/SQL记录
使用PL/SQL记录时,既可以直接使用记录变量,也可以使用记录成员。
示例一:在SELECT INTO语句中使用记录变量
DECLARE
  TYPE emp_record_type IS RECORD(
    NAME emp.ename%TYPE,
    salary emp.sal%TYPE,
    deptno emp.deptno%TYPE
  );
  emp_record emp_record_type;
BEGIN
  SELECT ename,sal,deptno INTO emp_record FROM emp
  WHERE empno = &empno;
  dbms_output.put_line(emp_record.name || ' '
    || emp_record.salary || ' '
    || emp_record.deptno);
END;
示例二:在SELECT INTO语句中使用记录成员
DECLARE
  TYPE emp_record_type IS RECORD(
    NAME emp.ename%TYPE,
    salary emp.sal%TYPE,
    deptno emp.deptno%TYPE
  );
  emp_record emp_record_type;
BEGIN
  SELECT ename,sal,deptno INTO emp_record.name,emp_record.salary,emp_record.deptno FROM emp
  WHERE empno = &empno;
  dbms_output.put_line(emp_record.name || ' '
    || emp_record.salary || ' '
    || emp_record.deptno);
END;
2、在INSERT语句中使用PL/SQL记录
示例一:在VALUES子句中使用记录变量
DECLARE
  dept_record dept%ROWTYPE;
BEGIN
  dept_record.deptno := 50;
  dept_record.dname := 'ADMINISTRATOR';
  dept_record.loc := 'BEIJING';
  INSERT INTO dept VALUES dept_record;
  COMMIT;
END;
示例二:在VALUES子句中使用记录成员
DECLARE
  dept_record dept%ROWTYPE;
BEGIN
  dept_record.deptno := 60;
  dept_record.dname := 'SALES';
  INSERT INTO dept(deptno,dname) VALUES (dept_record.deptno,dept_record.dname);
  COMMIT;
END;
3、在UPDATE语句中使用PL/SQL记录
(1)在SET子句中使用记录变量
DECLARE
  dept_record dept%ROWTYPE;
BEGIN
  dept_record.deptno := 30;
  dept_record.dname := 'SALES';
  dept_record.loc := 'SHANGHAI';
  UPDATE dept SET ROW = dept_record WHERE deptno = dept_record.deptno;
  COMMIT;
END;
(2)在SET子句中使用记录成员
DECLARE
  dept_record dept%ROWTYPE;
BEGIN
  dept_record.deptno := 30;
  dept_record.loc := 'ZHOUJIANG';
  UPDATE dept SET loc = dept_record.loc WHERE deptno = dept_record.deptno;
  COMMIT;
END;
4、在DELETE语句中使用PL/SQL记录
当使用PL/SQL记录删除数据时,只能在DELETE语句的WHERE子句中使用记录成员。
DECLARE
  dept_record dept%ROWTYPE;
BEGIN
  dept_record.deptno := 60;
  DELETE FROM dept WHERE deptno = dept_record.deptno;
  COMMIT;
END;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值