Обновите атрибут подтипа с помощью TREAT (Oracle 11g) - PullRequest
1 голос
/ 24 февраля 2010

Я хочу иметь возможность обновлять атрибут подтипа, и некоторые исследования привели меня к мысли, что это можно сделать с помощью TREAT. Я попробовал несколько вариантов этого синтаксиса:

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

myType является подтипом типа table1.

Продолжайте получать ошибку ORA-00927 missing equals sign.

Спасибо

Ответы [ 3 ]

0 голосов
/ 22 октября 2015

Я не знаю этот вопрос полностью, но в справочнике <> говорится, что для создания нового объекта используется DML

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

см. Стр. 1159

Лучшим решением может быть изменение дизайна таблицы типов, поскольку атрибут подтипа доступен, поэтому, возможно, сделайте его супертипом.

0 голосов
/ 27 мая 2019

Это должно работать для вас:

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;
0 голосов
/ 24 февраля 2010

Я никогда не использую ни одного из этих причудливых "таблиц объектов", поэтому не могу быть уверен, но мне кажется, что TREAT - это выражение, и вы не можете обновить результат любого выражения, например, это явно незаконно:

UPDATE emp SET UPPER(ename) = 'X'; -- Won't work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...