我应该在Oracle中使用%TYPE引用而不是标准数据类型吗?

时间:2013-03-07 01:40:30

标签: database oracle oracle10g

如果我的数据库中有超过200个表,我应该使用%TYPE引用而不是标准数据类型吗?

当我使用%TYPE与标准数据类型进行比较时是否会降低性能?

我是Oracle新手,也许这个问题非常基本,但我认为这对像我这样的新手来说非常重要。

1 个答案:

答案 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引用。