5
我有一个无参数构造函数的对象类型,但是当我将它指定为该类型列的默认值时,我得到ORA-00904:无效标识符错误。Oracle:指定对象类型的默认值列
实施例:
CREATE OR REPLACE TYPE test_t AS OBJECT ( val NUMBER(10), CONSTRUCTOR FUNCTION test_t return self as result ) CREATE OR REPLACE TYPE BODY test_t AS CONSTRUCTOR FUNCTION test_t RETURN SELF AS RESULT IS BEGIN val := 1; RETURN; END; END; CREATE TABLE test_table ( test_attr test_t DEFAULT new test_t() ) Error: ORA-00904: "INKA"."TEST_T"."TEST_T": invalid identifier
如果我替换例如DEFAULT test_t(1),它的工作,但这种打破OO封装范例,我希望所有相同类型的字段具有相同的默认“默认值”(希望你知道我的意思:-)
我是否缺少在这里的东西,或者这是正常的,它是不可能使用这样的非默认构造函数?
ORA-06553:PLS-307相同的构造函数定义的结果,甲骨文是在有些古怪;如果用val替换“in_val”参数名称(因为是属性的名称),它将正确地覆盖默认构造函数。 – 2012-03-29 13:39:14
没错,但它仍然找到了这个构造函数...... – 2012-03-29 13:42:14
我知道触发器的解决方法,但是对于应该可以以更易读易懂的方式进行操作的代码,需要5-10行代码。最初我假定这是不可能的,因为SQL上下文在PL/SQL上下文中没有看到,但显然不是这种情况,因为没有OO的东西可以在纯SQL中工作。所以这个问题要么是Oracle的监督,要么是我没有意识到的一些语法...... – 2012-03-29 13:47:19