2012-03-09 83 views
9

我想用下面的代码来定义一个type如何创建引用数据类型的表列的Oracle 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 

这是什么问题?

+1

有关此[Oracle论坛]的更多详细信息(https://forums.oracle.com/forums/thread.jspa?threadID=2269924)。我猜想是有道理的,但在我看来,这似乎是我直觉上想要做的最佳实践。 – wmorrison365 2013-02-27 11:25:05

回答

19

这是什么问题,%type是PL/SQL语法。它在SQL中不受支持。

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

我真的喜欢看到的是甲骨文支持哪些语法如下:为接口

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

动态对象:如何降温会是这样?

+0

'%type'是PL/SQL语法 - 这是我错过的重要一点。谢谢。 – AppleGrew 2012-03-09 13:43:39

+1

+1,这是一个耻辱,并会使这种'TYPE'编码更加灵活。 – Ollie 2012-03-09 13:49:47

+0

+2为答案,-1为“酷”:-)。 – Ben 2012-03-09 14:34:54

4

宣布在数据库中的类型时,您不能使用some_table_name.app_id%type,任何超过你可以这样做:

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

你必须使用一个内置的,如NUMBER,VARCHAR2(10)型或用户自定义类型如mytype

+0

感谢您的回答。 – AppleGrew 2012-03-09 13:43:05

相关问题