Ściśle mówiąc, nie ma czegoś takiego jak „skrypt plpgsql” - PL / pgSQL jest domyślnym językiem proceduralnym PostgreSQL. Jest to albo skrypt SQL, albo funkcja / procedura plpgsql. Twój przykład wskazuje na skrypt SQL.
Zamiast tego możesz utworzyć funkcję plpgsql (lub sql) (po stronie serwera ) , która przyjmuje dowolną liczbę argumentów. To bardzo proste, o ile argumenty są values
. To staje się nieco bardziej skomplikowane, jeśli argumenty zawierają identyfikatory. Następnie będziesz musiał używać PL / pgSQL z dynamicznym SQL i EXECUTE
.
PL / pgSQL jest domyślnie wstępnie zainstalowany w PostgreSQL 9.0 lub nowszym. Musisz zainstalować go raz na bazę danych w Postgres 8.3, jednak:
CREATE LANGUGAGE plpgsql;
Mówiąc o wersji: powinieneś rozważyć aktualizację do aktualnej wersji PostgreSQL. Wersja 8.3 jest już bardzo stara, wycofana z życia na początku 2013 roku.
Ponieważ wydaje się, że masz gotowy skrypt SQL, przedstawię funkcję SQL. Prosta funkcja fikcyjna z dwoma argumentami liczb całkowitych:
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$;
Możesz znaleźć wiele bardziej wyrafinowanych przykładów dla pliku plpgsql tutaj na dba.SE lub na SO .
Możesz wywołać tę funkcję i przekazać parametry w skrypcie powłoki: Podstawowy przykład wywołania w skrypcie powłoki, który używa parametrów wejściowych dla parametrów liczb całkowitych (nie są potrzebne pojedyncze cudzysłowy wokół wartości):
psql mydb -c "SELECT func($1, $2)"
Lub z dowolnym typem danych:
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
wykonuje jeden ciąg polecenia, a następnie kończy działanie. Więcej informacji o argumentach psql w wierszu poleceń w podręczniku .
-v
argumentu psql.