gpt4 book ai didi

sql - Oracle:为对象类型列指定默认值

转载 作者:行者123 更新时间:2023-12-04 15:53:28 28 4
gpt4 key购买 nike

我有一个带有无参数构造函数的对象类型,但是当我将它指定为该类型列的默认值时,我得到 ORA-00904: invalid identifier 错误。

例子:

创建或替换类型 test_t 作为对象
(
VAL NUMBER(10),
CONSTRUCTOR FUNCTION test_t 返回 self 作为结果
)

创建或替换类型 BODY test_t AS
构造函数 test_t 按结果返回自我
开始
值(value):= 1;
返回;
结尾;
结尾;

创建表 test_table (
test_attr test_t DEFAULT new test_t()
)

错误:ORA-00904: "INKA"."TEST_T"."TEST_T": 无效标识符

如果我用例如替换 DEFAULT test_t(1),它可以工作,但是这种方式打破了 OO 封装范式,我希望所有相同类型的字段都具有相同的默认“默认值”(希望你知道我的意思:-)

我在这里遗漏了什么,或者这是正常的,不可能使用这样的非默认构造函数?

最佳答案

看起来这是不可能的。

一种解决方法是使用触发器:

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT OR UPDATE
ON test_table
FOR EACH ROW
WHEN ( new.test_attr IS NULL )
BEGIN
:new.test_attr := NEW test_t();
END test_trigger;
/

顺便说一下,它并没有完全忽略非默认构造函数,而是覆盖了默认构造函数
CONSTRUCTOR FUNCTION test_t(in_val NUMBER)
RETURN SELF AS RESULT

尝试使用 DEFAULT NEW test_t(1) 定义表时导致异常:

ORA-06553: PLS-307: too many declarations of 'TEST_T' match this call

关于sql - Oracle:为对象类型列指定默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9925999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com