ORA 00933: команда SQL неправильно завершается оператором IN в oracle

#sql #oracle #plsql #sql-update

#sql #Oracle #plsql #sql-обновление

Вопрос:

Я пытаюсь выполнить запрос, который выглядит следующим образом

обновление L2l_Lov_Master set QUERY_STRING = ‘com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity ГДЕ entity.status В (‘НОВЫЙ’,’ОТКЛОНЕНО’,’ОТКЛОНЕН_В_КЛИЕНТЕ’)’ где LOV_ID = ‘customerLov-leadcode’;

Я использую oracle DB и получаю «ORA 00933: команда SQL не завершилась должным образом». Нужно знать, где что-то пошло не так

Ответ №1:

Насколько я могу судить, ваша проблема связана с кавычками -> чтобы быть более явным, у вас возникает проблема, когда IN начинается ваше предложение, потому что вы закрываете свою первую цитату из строки запроса

 query_string = 'com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity WHERE entity.status IN ('
 

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

 UPDATE l2l_lov_master
SET
    query_string = 'com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity WHERE entity.status IN (''
new '','' rejected '','' rejected_by_customer '')'
WHERE
    lov_id = 'customerLov-leadcode';
 

Комментарии:

1. рад помочь. Так же, как информация, при создании инструкции могут быть некоторые различия в тексте, поэтому убедитесь, что вы исправили их перед использованием кода в вашем реальном проекте. (в предложении IN я использовал нижний регистр и добавил несколько пробелов)

Ответ №2:

Можно легко заблудиться из-за слишком большого количества одинарных кавычек. Поэтому используйте механизм q-кавычек, как в следующем примере:

 SQL> CREATE TABLE l2l_lov_master
  2  AS
  3     SELECT 'customerLov-leadcode' lov_id, LPAD ('x', 500, 'x') query_string
  4       FROM DUAL;

Table created.
 

См. Строку # 3 и конец строки # 4, т.е. q'[blabla]' .

 SQL> UPDATE L2l_Lov_Master
  2     SET QUERY_STRING =
  3            q'[com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity
  4   WHERE entity.status IN ('NEW','REJECTED','REJECTED_BY_CUSTOMER')]'
  5   WHERE LOV_ID = 'customerLov-leadcode';

1 row updated.

SQL> SELECT * FROM l2l_lov_master;

LOV_ID
--------------------
QUERY_STRING
--------------------------------------------------------------------------------
customerLov-leadcode
com.jmr.profitto.los.app.retail.model.L2LLdmLeadinformation entity
 WHERE entity.status IN ('NEW','REJECTED','REJECTED_BY_CUSTOMER')


SQL>