如果我的数据库中有超过 200 个表,我应该使用 %TYPE 引用而不是标准数据类型吗?
与标准数据类型相比,使用 %TYPE 会降低性能吗?
我是 Oracle 的新手,也许这个问题很基础,但我认为这对像我这样的新手来说非常重要。
TYPE 关键字在编译时解析,与性能无关。
您应该尽可能地使用它,因为它为您存储的程序和对象创造了灵活性。当被引用的对象发生更改并且引用它的程序使用 TYPE 引用进行更改时,调用者将自动获得更改 - 它只需重新编译并使用新定义。使用非 TYPE 引用,您的程序可能会中断,因为字段的定义类型对于引用的列来说太大了。
例如,如果我有一个简单的表:
CREATE TABLE A (I1 INTEGER, C1 VARCHAR2(10));
我有一个从该表中读取的存储过程:
PROCEDURE P
var VARCHAR2(10);
BEGIN
SELECT C1 INTO var FROM A WHERE I1 = 1;
END;
这有效,直到您修改列的长度:
ALTER TABLE A MODIFY C1 VARCHAR2(20);
现在你可能会从你的选择中得到一个错误。
如果你这样写程序:
PROCEDURE P
var A.C1%TYPE;
BEGIN
SELECT C1 INTO var FROM A WHERE I1 = 1;
END;
然后你的代码是免疫的,因为 Oracle 会在你运行它时重新编译过程,检测 TYPE 引用。