2016-03-30 4 views
0

У меня есть триггер оракула и он возвращает ошибку
недостающего выражения Oracle Query

Дополнительной информацию: ORA-00936: отсутствует выражение

В моей TOAD он показывает мне строку ниже.

EXECUTE IMMEDIATE 'UPDATE TBL_NEWS_TYPE SET FULLNAME='|| newsName ||' WHERE ID = SELECT MAX(ID) FROM TBL_NEWS_TYPE)'; 

В здесь newsName является varchar2 переменной, как newsName VARCHAR2 (50)/и ID в целочисленном.

+0

удалить) после TBL_NEWS_TYPE, и вы должны пройти через – Satya

+0

Почему вы используете 'execute immediately' здесь? Для этого нет оснований. И если вам придется по какой-то странной причине, то по крайней мере использовать его с параметрами. Конкатенирование таких ценностей в конечном итоге приведет к проблемам. e, g .: «выполнить немедленное» обновление tbl_news_type set fullname =: 1 где id = (...) 'using newsname; ' –

ответ

2

Попробуйте это:

EXECUTE IMMEDIATE 'UPDATE TBL_NEWS_TYPE 
        SET FULLNAME='''|| newsName 
        ||''' WHERE ID = (SELECT MAX(ID) FROM TBL_NEWS_TYPE)' 

Я думаю, что у вас две проблемы здесь:

1) Вы отсутствовали '(' в начале выбора

2) Я думаю, что это вон работайте, не помещая знак цитаты, сотрясающий имя NewsName, потому что это строка.

+0

Теперь это показывает мне это исключение ORA-06519: активная автономная транзакция обнаружена и откат – TechGuy

+0

И thats весь код? вы уверены, что это часть, которая бросает исключение? – sagi

+0

ах! получил его, я использовал PRAGMA AUTONOMOUS_TRANSACTION; .. сейчас COMMIT отсутствует .. я это сделал и отлично работал. – TechGuy