Мне нужно вставить много записей о стоимости продукта в таблицу Oracle. Я получаю все данные из файла xls, обрабатываю их с помощью PHP и (пока) выкладываю длинный SQL-оператор. Поскольку каждая запись вставлена, я хочу проверить идентификаторы продуктов, которые я получил от xls, по продуктам, уже имеющимся в базе данных, пропуская вставку, если идентификаторы не соответствуют продукту. Утверждение, которое я пробовал, выглядит следующим образом:
INSERT ALL
INTO PRODUCTOS_X_PLANES_CATEGORIA(PXG_ID, PXG_PRODUCTO, PXG_PLAN_CATEGORIA, PXG_VALOR)
VALUES (NULL, 123456, 81, 10000)
INTO PRODUCTOS_X_PLANES_CATEGORIA(PXG_ID, PXG_PRODUCTO, PXG_PLAN_CATEGORIA, PXG_VALOR)
VALUES (NULL, 7890, 76, 11000)
SELECT * FROM DUAL;
Что дает мне
[Err] ORA-02291: integrity constraint (OURDB.PXG_PRODUCTO_FKEY) violated - parent key not found
сообщение об ошибке. Я хочу проверить, существует ли ключ PXG_PRODUCTO
перед попыткой вставки. Я должен проверить против поля PRODUCTOS.PRO_ID
. Я пробовал что-то вроде
INSERT ALL
INTO PRODUCTOS_X_PLANES_CATEGORIA (PXG_ID, PXG_PRODUCTO, PXG_PLAN_CATEGORIA, PXG_VALOR)
VALUES (NULL, 123456, 81, 10000)
USING PRODUCTOS ON PXG_PRODUCTO = PRO_ID
INTO PRODUCTOS_X_PLANES_CATEGORIA (PXG_ID, PXG_PRODUCTO, PXG_PLAN_CATEGORIA, PXG_VALOR)
VALUES (NULL, 7890, 76, 11000)
USING PRODUCTOS ON PXG_PRODUCTO = PRO_ID
SELECT * FROM DUAL;
получает только
[Err] ORA-00928: missing SELECT keyword
сообщение. Какой правильный синтаксис? Или, если я совершенно не прав, что мне делать вместо этого?
РЕДАКТИРОВАТЬ Использование
INSERT ALL
INTO PRODUCTOS_X_PLANES_CATEGORIA (PXG_ID, PXG_PRODUCTO, PXG_PLAN_CATEGORIA, PXG_VALOR) VALUES (NULL, 123456, 81, 10000) WHERE EXISTS (SELECT * FROM PRODUCTOS WHERE 123456 = PRO_ID)
INTO PRODUCTOS_X_PLANES_CATEGORIA (PXG_ID, PXG_PRODUCTO, PXG_PLAN_CATEGORIA, PXG_VALOR) VALUES (NULL, 7890, 76, 11000) WHERE EXISTS (SELECT * FROM PRODUCTOS WHERE 7890 = PRO_ID)
SELECT * FROM DUAL;
по-прежнему приводит к
[Err] ORA-00928: missing SELECT keyword