tech:notes_postgres_pl_pgsql
Différences
Ci-dessous, les différences entre deux révisions de la page.
| tech:notes_postgres_pl_pgsql [2025/03/24 15:06] – créée - modification externe 127.0.0.1 | tech:notes_postgres_pl_pgsql [2025/05/25 18:48] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Notes Postgres PL/PGSQL | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | ~~~sql | ||
| + | CREATE OR REPLACE FUNCTION add(a INT,b INT) RETURNS bigint AS $$ | ||
| + | DECLARE | ||
| + | c int; | ||
| + | BEGIN | ||
| + | c:=a+b; | ||
| + | RAISE NOTICE 'Arg1 : %',a; | ||
| + | RAISE NOTICE 'Arg2 : %',b; | ||
| + | RAISE NOTICE ' | ||
| + | IF c<0 THEN | ||
| + | RAISE EXCEPTION 'Error c negativ'; | ||
| + | END IF; | ||
| + | RETURN c; | ||
| + | END; | ||
| + | $$ LANGUAGE PLPGSQL; | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Call function | ||
| + | |||
| + | Si aucun résultat n'est attendu Utiliser '' | ||
| + | Note : A la place de '' | ||
| + | Voir aussi '' | ||
| + | ~~~sql | ||
| + | CREATE OR REPLACE FUNCTION foo() | ||
| + | RETURNS void AS $$ | ||
| + | BEGIN | ||
| + | RAISE NOTICE 'Hello from void function'; | ||
| + | END; | ||
| + | $$ LANGUAGE plpgsql; | ||
| + | |||
| + | -- direct call from SQL | ||
| + | SELECT foo(); | ||
| + | |||
| + | -- in PLpgSQL | ||
| + | DO $$ | ||
| + | BEGIN | ||
| + | SELECT foo(); -- is not allowed | ||
| + | PERFORM foo(); -- is ok | ||
| + | END; | ||
| + | $$; | ||
| + | ~~~ | ||
| + | |||
| + | ~~~sql | ||
| + | SELECT ma_function(); | ||
| + | |||
| + | SELECT * FROM ma_function(); | ||
| + | |||
| + | DO $$ BEGIN | ||
| + | PERFORM ma_function(); | ||
| + | END $$; | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Ne rien faire | ||
| + | |||
| + | Utiliser '' | ||
| + | |||
| + | ~~~sql | ||
| + | BEGIN | ||
| + | y := x / 0; | ||
| + | EXCEPTION | ||
| + | WHEN division_by_zero THEN | ||
| + | NULL; -- ignore the error | ||
| + | END; | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### cast conversion type - date | ||
| + | |||
| + | ~~~ | ||
| + | db1=> SELECT now(); | ||
| + | now | ||
| + | ------------------------------- | ||
| + | | ||
| + | (1 row) | ||
| + | |||
| + | db1=> SELECT now():: | ||
| + | now | ||
| + | ---------------------------- | ||
| + | | ||
| + | (1 row) | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### DEBUG | ||
| + | |||
| + | Avec '' | ||
| + | ~~~sql | ||
| + | CREATE OR REPLACE FUNCTION plop() RETURNS INT AS $$ | ||
| + | DECLARE | ||
| + | query1 text; | ||
| + | WN_RESULT INT; | ||
| + | -- res RECORD; | ||
| + | res table%rowtype; | ||
| + | BEGIN | ||
| + | | ||
| + | | ||
| + | FOR res IN | ||
| + | | ||
| + | LOOP | ||
| + | query1=' | ||
| + | || res.atable | ||
| + | || ') AS subquery WHERE atable=' | ||
| + | || quote_literal(res.atable) ; | ||
| + | RAISE NOTICE ' | ||
| + | EXECUTE query1 ; | ||
| + | END LOOP; | ||
| + | EXCEPTION | ||
| + | | ||
| + | WHEN OTHERS THEN | ||
| + | RAISE WARNING ' | ||
| + | | ||
| + | END; | ||
| + | | ||
| + | END; | ||
| + | $$ language plpgsql; | ||
| + | | ||
| + | | ||
| + | SELECT plop(); | ||
| + | ~~~ | ||
| + | |||
