为什么我们无法使用以下代码创建对象。
create or replace type typ_obj_dba_test as object (name_col
dba_objects.object_name%type);
它告诉我必须声明object_name。
是因为dba_objects是一个视图吗?
答案 0 :(得分:1)
"是因为dba_objects是一个视图吗?"
没有。您也无法使用表格列来执行此操作。 %TYPE
语法仅限于PL / SQL,您正在创建SQL TYPE,而不是PL / SQL。
这种限制令许多开发人员感到烦恼,特别是那些来自更动态编程语言背景的开发人员。但问题是%TYPE
语法是动态的:如果引用的列更改其数据类型,则引用对象会发生更改。
当我们在存储过程中声明变量或参数时,这很简洁。但我们可以使用SQL类型来定义表列(*)。将一列中的更改级联到引用它的who-know-how-many列将是一场噩梦。所以Oracle不允许我们这样做。
我担心您需要使用显式数据类型声明:
create or replace type typ_obj_dba_test as object (
name_col varchar2(30)
);
(*)通常不建议在表定义中使用Types,但Oracle支持ORDBMS数据结构。