I have to insert many product value records into an Oracle table. I get all the data from an xls file, processing it with PHP and (for now) spitting out a long SQL statement. As each record is inserted, I want to check the Product IDs I got from the xls against the products already in the database, skipping the insert if the IDs don’t match a product. The statement I tried is the following:
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;
Which gets me an
[Err] ORA-02291: integrity constraint (OURDB.PXG_PRODUCTO_FKEY) violated - parent key not found
error message. I want to check that the PXG_PRODUCTO key exists before attempting the insert. I should check against the PRODUCTOS.PRO_ID field. I tried something like
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;
getting only a
[Err] ORA-00928: missing SELECT keyword
message. What’s the correct syntax? Or, if I’m completely wrong, what should I be doing instead?
EDIT Using
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;
still results in
[Err] ORA-00928: missing SELECT keyword
You could use
where: