前言
PL/SQL 提供了 %TYPE 和 %ROWTYPE 两种特殊的变量,用于声明与表的列相匹配的变量和用户定义数据类型,前一个表示单属性的数据类型,后一个表示整个属性列表的结构,即元组的类型。
举例:
-- 数据表TB_TRANS_RECORD
CREATE TABLE TB_TRANS_RECORD (
FEE NUMBER,
TRANS_TIME DATE
)
-- 定义一个与表TB_TRANS_RECORD中FEE类型相同的变量
DECLARE
FEE TB_TRANS_RECORD.FEE%TYPE;
-- 定义一个与表TB_TRANS_RECORD结构相同的数组
DECLARE
V_TB_TRANS_RECORD TB_TRANS_RECORD%ROWTYPE;
-- 为数组中的变量赋值
BEGIN
V_TB_TRANS_RECORD.FEE := 2000;
V_TB_TRANS_RECORD.TRANS_TIME := SYSDATE();
-- 可以将查询的某一行记录,赋值给 V_TB_TRANS_RECORD
select a.* into V_TB_TRANS_RECORD from TB_TRANS_RECORD where id = 1;
-- 输出值
dbms_output.put_line(V_TB_TRANS_RECORD.FEE);
END;
通过 %TYPE 和 %ROWTYPE 定义出来的变量会随着原数据表的结构的变化而变化,进而避免了我们在修改表字段类型时对其他程序中定义的变量造成的影响。