Я использую Postgres с PHP, у меня есть два зависимых запроса, как показано ниже:
INSERT INTO tab2
SELECT * FROM tab1 WHERE col1 = $1 AND col2 IS NOT NULL;
DELETE FROM tab1 WHERE col1 = $1 AND col2 IS NOT NULL ;
Я хочу, чтобы они оба запускались или ни один из них. Итак, я создал ниже блок кода:
DO $$
BEGIN
INSERT INTO tab2
SELECT * FROM tab1 WHERE col1 = $1 AND col2 IS NOT NULL ;
DELETE FROM tab1 WHERE col1 = $1 AND col2 IS NOT NULL ;
END$$
Но это не работает и дает ошибку ниже:
ОШИБКА: В сообщении bind указаны 1 параметр, но для подготовленного оператора «» требуется 0
PHP-код:
$result = pg_query_params($pg_con_write,$query_PG,array($Param1));
Я думаю, что не могу использовать параметры привязки таким образом … Поэтому, пожалуйста, предложите наилучший способ сделать это …
Я думаю, что $$ это проблема, вы должны переписать ваш запрос следующим образом:
BEGIN;
INSERT INTO tab2
SELECT * FROM tab1 WHERE col1 = $1 AND col2 IS NOT NULL;
DELETE FROM tab1 WHERE col1 = $1 AND col2 IS NOT NULL;
COMMIT;
Других решений пока нет …