Açıkçası, "plpgsql betiği" diye bir şey yoktur - PL / pgSQL, PostgreSQL'in varsayılan yordamsal dilidir. Bu bir SQL betiği veya bir plpgsql işlevi / yordamıdır. Örneğiniz bir SQL komut dosyasını gösteriyor gibi görünüyor.
Bunun yerine, herhangi bir sayıda bağımsız değişken alan bir (sunucu tarafı) plpgsql (veya sql) işlevi oluşturabilirsiniz. Argümanlar olduğu sürece çok basit values
. Bağımsız değişkenler tanımlayıcılar içeriyorsa biraz daha karmaşık hale gelir. Ardından dinamik SQL ve ile PL / pgSQL kullanmanız gerekir EXECUTE
.
PL / pgSQL, PostgreSQL 9.0 veya sonraki sürümlerinde varsayılan olarak önceden yüklenmiştir. Yine de, Postgres 8.3'te veritabanı başına bir kez yüklemeniz gerekir:
CREATE LANGUGAGE plpgsql;
Sürümden bahsetmişken: PostgreSQL'in güncel bir sürümüne geçmeyi düşünmelisiniz . v8.3 şimdiye kadar çok eskidir, 2013'ün başlarında kullanım ömrü dolmuştur.
Hazır bir SQL betiğine sahip olduğunuz için bir SQL işlevi göstereceğim. İki tamsayı bağımsız değişkeni ile basit kukla işlev:
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$;
Sen plpgsql için daha birçok gelişmiş örnek bulabilirsiniz Burada dba.SE üzerinde veya benzeri .
Bu işlevi çağırabilir ve bir kabuk komut dosyasındaki parametreleri verebilirsiniz: Tam sayı parametreleri için giriş parametreleri kullanan bir kabuk komut dosyasındaki çağrı için temel örnek (değerin etrafında tek tırnak gerekmez):
psql mydb -c "SELECT func($1, $2)"
Veya herhangi bir veri türüyle:
psql mydb -c "SELECT func2('$1'::text, '$2'::numeric)"
-c
bir komut dizesi yürütür ve sonra çıkar. Kılavuzdaki psql komut satırı bağımsız değişkenleri hakkında daha fazla bilgi .
-v
psql argümanını arıyorsunuz .