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)"
-cbir 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 .
-vpsql argümanını arıyorsunuz .