我希望能够更新子类型属性,并且一些研究让我相信它可以用TREAT完成。我在这种语法上尝试了几种变体:
UPDATE table1 t SET TREAT(VALUE(t) AS myType).attributeToUpdate = 10 WHERE id=1;
myType是table1类型的子类型。
继续收到错误ORA-00927 missing equals sign
。
由于
答案 0 :(得分:0)
我从来没有使用任何这些离奇的“对象表”的东西,所以不能确定,但在我看来,TREAT是一个表达式,你不能更新任何表达式的结果,例如这显然是非法的:
UPDATE emp SET UPPER(ename) = 'X'; -- Won't work
答案 1 :(得分:0)
应该为您工作:
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;
答案 2 :(得分:-1)
我完全不了解这个问题,但参考书<>说使用DML构建一个新对象
http://www.howardsmith.net/manuals/Oracle_PL_SQL_Programming.pdf
请参阅第1159页
更好的解决方案可能是更改类型表的设计,因为子类型属性是可访问的,因此可能使其成为超类型。