1

我希望能够更新子类型属性,一些研究使我相信可以使用 TREAT 来完成。我已经尝试了这种语法的几种变体:

UPDATE table1 t SET TREAT(VALUE(t) AS myType).attributeToUpdate = 10 WHERE id=1;

myType 是 table1 类型的子类型。

不断收到错误ORA-00927 missing equals sign

谢谢

4

3 回答 3

0

我从不使用任何这种奇怪的“对象表”的东西,所以不能确定,但​​在我看来 TREAT 是一个表达式,你不能更新任何表达式的结果,例如这显然是非法的:

UPDATE emp SET UPPER(ename) = 'X'; -- Won't work
于 2010-02-24T10:18:01.383 回答
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;
于 2019-05-27T14:04:17.370 回答
-1

我不完全了解这个问题,但是参考书 <> 说要使用 DML 构造一个新对象

http://www.howardsmith.net/manuals/Oracle_PL_SQL_Programming.pdf

见第 1159 页

更好的解决方案可能是更改类型表的设计,因为子类型属性是可访问的,所以可能将其设为超类型。

于 2015-10-22T11:33:38.687 回答