如何创建引用数据类型的表列的Oracle Type?

时间:2012-03-09 13:05:46

标签: sql oracle user-defined-types

我正在尝试使用以下代码定义type

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT (
    app_id        some_table_name.app_id%type
);

如果我运行此操作,则会收到错误。

Error(4,32): PLS-00201: identifier 'some_table_name.app_id' must be declared

这有什么问题?

2 个答案:

答案 0 :(得分:19)

它有什么问题是%type是PL / SQL语法。 SQL不支持它。

我同意这是一种耻辱,如果我们可以像这样引用类型声明中的表列,那将非常简洁。不幸的是,Oracle在过去的几个版本中确实放慢了对TYPE实现的更改,所以我认为这不太可能在不久的将来发生变化。

真正希望看到的是Oracle支持这种语法:

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT 
      (     one_row        some_table_name.%rowtype ); 

接口的动态对象:它有多酷?

答案 1 :(得分:4)

在数据库中声明类型时,不能使用some_table_name.app_id%type,而不能执行此操作:

create table emp (empno number,
                  deptno dept.deptnp%type, -- NOT ALLOWED
                 );

您必须使用内置类型(如NUMBER,VARCHAR2(10))或用户定义的类型(例如mytype