Строго говоря, «сценария plpgsql» не существует - PL / pgSQL является процедурным языком по умолчанию PostgreSQL. Это либо сценарий SQL, либо функция / процедура plpgsql. Ваш пример, кажется, указывает на сценарий SQL.
Вместо этого вы можете создать (на стороне сервера) функцию plpgsql (или sql) , которая принимает любое количество аргументов. Это очень просто, пока аргументы values
. Это становится немного сложнее, если аргументы включают идентификаторы. Тогда вам придется использовать PL / pgSQL с динамическим SQL и EXECUTE
.
PL / pgSQL предустановлен по умолчанию в PostgreSQL 9.0 или новее. Вы должны установить его один раз для каждой базы данных в Postgres 8.3, хотя:
CREATE LANGUGAGE plpgsql;
Говоря о версии: вы должны рассмотреть возможность обновления до текущей версии PostgreSQL. v8.3 к настоящему моменту устарел, его конец жизни пришелся на начало 2013 года.
Поскольку у вас есть готовый сценарий SQL, я продемонстрирую функцию SQL. Простая фиктивная функция с двумя целочисленными аргументами:
CREATE OR REPLACE FUNCTION func(int, int)
LANGUAGE sql RETURNS void AS
$func$
UPDATE tbl1 SET col1 = $1 WHERE id = $2;
UPDATE tbl2 SET col1 = $1 WHERE id = $2;
$func$;
Вы можете найти много более сложных примеров для plpgsql здесь, на dba.SE или на SO .
Вы можете вызвать эту функцию и передать параметры в сценарии оболочки: базовый пример вызова в сценарии оболочки, который использует входные параметры для целочисленных параметров (без одинарных кавычек вокруг необходимого значения):
psql mydb -c "SELECT func($1, $2)"
Или с любым типом данных:
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
выполняет одну командную строку и затем завершается. Подробнее об аргументах командной строки psql в руководстве .
-v
аргумент PSQL.