定义记录类型
TYPE 类型名称 IS RECORD(
成员名称 数据类型[[NOT NULL][:= 默认值] 表达式],
....
);
使用记录类型返回接受查询结果
SQL> DECLARE
2 v_emp_empno emp.empno%TYPE;
3 v_emp_ename emp.ename%TYPE;
4 v_emp_job emp.job%TYPE;
5 v_emp_hiredate emp.hiredate%TYPE;
6 v_emp_sal emp.sal%TYPE;
7 v_emp_comm emp.comm%TYPE;
8 BEGIN
9 v_emp_empno:=&inputempno;
10 SELECT ename,job,hiredate,sal,comm INTO
11 v_emp_ename,v_emp_job,v_emp_hiredate,v_emp_sal,v_emp_comm
12 FROM emp WHERE empno=v_emp_empno;
13 DBMS_OUTPUT.put_line('雇员编号:'||v_emp_empno||',姓名:'||v_emp_ename||'.职业:'
14 ||v_emp_job||',雇佣日期:'||TO_CHAR(v_emp_hiredate,'yyyy-mm-dd')||',基本工资:'
15 ||v_emp_sal||',佣金:'||NVL(v_emp_comm,0));
16 EXCEPTION
17 WHEN OTHERS THEN
18 RAISE_APPLICATION_ERROR(-20007,'此雇员不存在!');
19 END;
20 /
输入 inputempno 的值: 7369
原值 9: v_emp_empno:=&inputempno;
新值 9: v_emp_empno:=7369;
雇员编号:7369,姓名:SMITH.职业:CLERK,雇佣日期:1980-12-17,基本工资:800,佣金:0
PL/SQL 过程已成功完成。
用户自定义类型
SQL> DECLARE
2 TYPE dept_type IS RECORD(
3 deptno dept.deptno%TYPE:=80,
4 dname dept.dname%TYPE,
5 loc dept.loc%TYPE
6 );
7 v_dept dept_type;
8 BEGIN
9 v_dept.dname:='abx';
10 v_dept.loc:='china';
11 DBMS_OUTPUT.put_line('部门编号:'||v_dept.deptno||'名称:'||v_dept.dname||'位置:'||v_dept.loc);
12 END;
13 /
部门编号:80名称:abx位置:china
PL/SQL 过程已成功完成。
使用记录类型保存数据
原始数据
SQL> select *from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
80 chais sddsf
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select *from dept;
DEPTNO DNAME LOC
---------- ---------------------------- --------------------------
80 hello,world china
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON