Ошибка Oracle SQL ORA-00933 при вставке в Lucee

Ошибка ORA-00933: команда SQL неправильно завершена

Попытка ВСТАВИТЬ строку с помощью следующего оператора cfscript:

q.setSQL("
INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE) 
SELECT #r.SCOINDEX[i]#, sc.DESCRIP, #(data.isDefault == 'Y' ? "'Y'" : "NULL")#, sc.CODE, sc.ID, sc.PRICE
FROM SALES_CHOICE sc
WHERE sc.ID = #y.id[1]#
");

Результаты в

INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE) 
SELECT 25628, sc.DESCRIP, 'Y', sc.CODE, sc.ID, sc.PRICE
FROM SALES_CHOICE sc
WHERE sc.ID = 222

Другие варианты, которые также не работают с ошибкой ORA-00933:

INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE, SEQ) 
SELECT 25628, DESCRIP, 'Y', CODE, ID, PRICE, NULL
FROM SALES_CHOICE
WHERE ID = 222
AND NOT ID in (
    SELECT SALES_CHOICE_ID 
    FROM SALES_OPTION_CHOICE l
    WHERE SALES_CONFIG_OPTION_ID = 25628
)

INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE, SEQ) 
SELECT 25628, DESCRIP, 'Y', CODE, ID, PRICE, NULL
FROM SALES_CHOICE
WHERE ID = 222

INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE, SEQ) 
SELECT 25628, DESCRIP, 'Y', CODE, ID, PRICE, NULL
FROM SALES_CHOICE
WHERE ID = 222

INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE) 
SELECT 25628 SCOINDEX, DESCRIP, 'Y' ISDEFAULT, CODE, ID, PRICE
FROM SALES_CHOICE
WHERE ID = 222

INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE) 
SELECT 25628 SCOINDEX, sc.DESCRIP, 'Y' ISDEFAULT, sc.CODE, sc.ID, sc.PRICE
FROM SALES_CHOICE sc
WHERE sc.ID = 222

INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE) 
SELECT 25628 SCOINDEX, sc.DESCRIP, 'Y' ISDEFAULT, sc.CODE, sc.ID, sc.PRICE
FROM SALES_CHOICE sc
WHERE sc.ID = 222;

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


person Teaspoon    schedule 24.01.2017    source источник
comment
ORA-00933: SQL command not properly ended для тех, кто (как и я) не является ходячей энциклопедией сообщений об ошибках Oracle. @Teaspoon: задавайте вопросы на этом (или любом другом) форуме, указывая полное сообщение об ошибке.   -  person Boneist    schedule 24.01.2017
comment
Опубликуйте свою таблицу DDL. Насколько я вижу, ваш оператор вставки верен.   -  person XING    schedule 24.01.2017
comment
AND NOT ID in(.. следует заменить на AND id NOT in(....   -  person atokpas    schedule 24.01.2017
comment
Таблица @XING DDL является частной, поэтому я не буду ее публиковать. Имя таблицы и все столбцы в верхнем регистре.   -  person Teaspoon    schedule 24.01.2017
comment
Совершенно не связано с вопросом, но вам действительно следует использовать cfqueryparam/addParam для всех переменных параметров запроса.   -  person Leigh    schedule 25.01.2017


Ответы (1)


РЕШЕНО! По-видимому, операторы INSERT должны быть заключены в BEGIN - END;

q.setSQL("
    BEGIN
       INSERT INTO SALES_OPTION_CHOICE (SALES_CONFIG_OPTION_ID, DESCRIP, ISDEFAULT, CODE, SALES_CHOICE_ID, PRICE) 
       SELECT #r.SCOINDEX[i]#, sc.DESCRIP, #(data.isDefault == 'Y' ? "'Y'" : "NULL")#, sc.CODE, sc.ID, sc.PRICE
       FROM SALES_CHOICE sc
       WHERE sc.ID = #y.id[1]#;
    END;
");
person Teaspoon    schedule 24.01.2017