如果我的数据库中有超过200个表,我应该使用%TYPE引用而不是标准数据类型吗?
当我使用%TYPE与标准数据类型进行比较时是否会降低性能?
我是Oracle新手,也许这个问题非常基本,但我认为这对像我这样的新手来说非常重要。
答案 0 :(得分:3)
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引用。