1. %TYPE变量
在声明变量时,除了可以使用Oracle规定的数据类型外,还可以使用%TYPE关键字定义变量类型。%TYPE关键字的含义是声明一个与指定列名称相同的数据类型。
SQL> set serveroutput on
SQL> declare
2 var_name emp.ename%type;
3 var_no emp.empno%type;
4 var_sal emp.sal%type;
5 begin
6 select empno,ename,sal
7 into var_no,var_name,var_sal
8 from emp
9 where empno='7369';
10 dbms_output.put_line(var_no || ' ' || var_name || ' ' || var_sal);
11 end;
12 /
结果:
7369 SMITH 800
PL/SQL 过程已成功完成。
2.复合变量
2.1自定义记录类型
使用自定义记录数据类型的变量可以存储由多个列值组成的一行数据。
SQL> set serveroutput on
SQL> declare
2 type employee_type is record(
3 no_number number,
4 name_string varchar2(20),
5 sal_number number);
6 employee employee_type;
7 begin
8 select empno,ename,sal
9 into employee
10 from emp
11 where empno='7369';
12 dbms_output.put(employee.no_number);
13 dbms_output.put(' '|| employee.name_string);
14 dbms_output.put(' '|| employee.sal_number);
15 end;
16 /
结果:
7369 SMITH 800
PL/SQL 过程已成功完成。
2.2 %ROWTYPE类型
与%TYPE类型和自定义类型的变量相比,%ROWTYPE类型的变量结合了这两者的优点,它可以根据数据表中行的结构定义数据类型,用于存储从数据表中检索到的一行数据。
SQL> set serveroutput on
SQL> declare
2 row_employee emp%rowtype;
3 begin
4 select * into row_employee
5 from emp
6 where empno='7499';
7 dbms_output.put(row_employee.empno || ' ');
8 dbms_output.put(row_employee.ename || ' ');
9 dbms_output.put(row_employee.job || ' ');
10 dbms_output.put_line(row_employee.sal);
11 end;
12 /
结果:
7499 ALLEN SALESMAN 1600
PL/SQL 过程已成功完成。