1.%TYPE说明
为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个变量的数据类型时,就只能采用这种方法定义变量的数据类型。
定义格式:
变量名 表名.字段(列)名%type;
优点:
用户不必了解数据库中列的类型。
当数据库表中的字段类型修改后,PL/SQL程序中相应变量的类型也自动修改。
缺点:
对系统性能有影响
2.%ROWTYPE说明
如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,并且不容易遗漏、出错。这样会增加程序的可维护性。为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个表的结构及其数据类型时,就只能采用这种方法定义变量的数据类型。
一行记录可以保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有相同的名称和数据类型。
变量名 数据表%rowtype
优点:
可以将检索的一整行数据保存到该变量中,并根据表中的列名引用对应的数值.
【实例】查询109号员工的工资以及140号员工的员工名与工资,并输出出:
DECLARE
v_sal employees.salary%TYPE;
v_emp employees%ROWTYPE;
BEGIN
SELECT salary INTO v_sal FROM employees WHERE employee_id=109;
SELECT*INTO v_emp FROM employees WHERE employee_id=140;
DBMS_OUTPUT. PUT_LINE (v_sal);
DBMS_OUTPUT. PUT_LINE (v_emp.first name ||v_emp.salary);
EDN;
使用%TYPE或%ROWTYPE时需要注意:●变量的类型随参照的变量类型、数据库表列类型、表结构的变化而变化。
●如果数据库表列中有 NOT NULL约束,则%TYPE与%ROWTYPE返回的数据类型没有此限制。