我希望能够更新子类型属性,一些研究使我相信可以使用 TREAT 来完成。我已经尝试了这种语法的几种变体:
UPDATE table1 t SET TREAT(VALUE(t) AS myType).attributeToUpdate = 10 WHERE id=1;
myType 是 table1 类型的子类型。
不断收到错误ORA-00927 missing equals sign
。
谢谢
我希望能够更新子类型属性,一些研究使我相信可以使用 TREAT 来完成。我已经尝试了这种语法的几种变体:
UPDATE table1 t SET TREAT(VALUE(t) AS myType).attributeToUpdate = 10 WHERE id=1;
myType 是 table1 类型的子类型。
不断收到错误ORA-00927 missing equals sign
。
谢谢
我从不使用任何这种奇怪的“对象表”的东西,所以不能确定,但在我看来 TREAT 是一个表达式,你不能更新任何表达式的结果,例如这显然是非法的:
UPDATE emp SET UPPER(ename) = 'X'; -- Won't work
这应该对你有用:
DECLARE
s subclass;
BEGIN
SELECT treat(value(p) as subclass) INTO s FROM superclass p WHERE id = search;
s.attributeToChange = 'new value';
UPDATE superclass p SET value(p) = s WHERE id = search;
END;
我不完全了解这个问题,但是参考书 <> 说要使用 DML 构造一个新对象
http://www.howardsmith.net/manuals/Oracle_PL_SQL_Programming.pdf
见第 1159 页
更好的解决方案可能是更改类型表的设计,因为子类型属性是可访问的,所以可能将其设为超类型。