Procédures

(sujet mis à jour avec la version 11 beta)

Une syntaxe plus directe pour une fonctionnalité existante

      Oracle Database peut embarquer et exécuter en base du Java (c’est très peu utilisé) et du PL/SQL (c’est très utilisé). Il est possible de créer des fonctions PL/SQL mais aussi des procédures si le programme ne doit pas renvoyer de résultat.
      En plus de la possibilité de créer des fonctions C et SQL, PostgreSQL offre de nombreux langages pour coder côté base. Quatre sont disponibles en standard : PL/pgSQL, un langage proche du PL/SQL, mais aussi PL/Perl, PL/Tcl, PL/Python.
      Il n’était pas possible jusqu’à la version 10 incluse de créer des procédures dans ces différents langages. Il était bien sûr possible de créer des fonctions retournant VOID mais, si vous le souhaitez, vous pouvez à présent créer directement des procédures avec CREATE PROCEDURE.
      Démonstration avec PostgreSQL 11 devel :

select version(); version -------------------------------------------------------------------------------------------- PostgreSQL 11devel on x86_64-pc-linux-gnu, compiled by gcc (Debian 7.2.0-16) 7.2.0, 64-bit (1 ligne) start transaction; START TRANSACTION create table all_times(cu timestamp, st timestamp, cl timestamp); CREATE TABLE CREATE PROCEDURE pg_temp.insert_times() LANGUAGE SQL AS $$ INSERT INTO all_times(cu, st, cl) VALUES (current_timestamp, statement_timestamp(), clock_timestamp()); $$; CREATE PROCEDURE CREATE PROCEDURE pg_temp.pl_insert_times() AS $$ BEGIN EXECUTE 'INSERT INTO all_times(cu, st, cl) VALUES (current_timestamp, statement_timestamp(), clock_timestamp());'; END; $$ LANGUAGE plpgsql; CREATE PROCEDURE CALL pg_temp.insert_times(); CALL CALL pg_temp.pl_insert_times(); CALL select * from all_times; cu | st | cl ---------------------------+----------------------------+---------------------------- 2017-12-04 14:04:50.56782 | 2017-12-04 14:05:26.58376 | 2017-12-04 14:05:26.58455 2017-12-04 14:04:50.56782 | 2017-12-04 14:05:33.441893 | 2017-12-04 14:05:33.442741 (2 lignes) rollback; ROLLBACK

      Ce n’est pas une avancée essentielle mais c’est encore un petit plus en perspective qui fait plaisir.

Mise à jour : 04/12/2017