jeudi 2 juillet 2009
Obtenir le statut d'exécution d'une requête PostgreSQL
Publié par Infinite Loop, à 19 h 31
0 commentaire
Vous savez que lorsqu'on exécute un énoncé SQL, le serveur répond habituellement avec un message indiquant le nombre d'enregistrements qui ont été affectés par la requête.
Sur PostgreSQL, si on utilise un éditeur comme pgAdmin III, on peut voir le statut dans l'onglet Message de l'Output Pane.
Avec une table comme celle-ci (excusez mon exemple simpliste) :
CREATE TABLE tblSi on effectue une mise à jour en lot (mieux connu sous le nom de "batch update") ou une insertion de plusieurs enregistrements à partir du même énoncé :
(
id serial NOT NULL,
title character varying(255)
)
INSERT INTO tbl(title)On verra apparaître un statut semblable au suivant :
VALUES ('ABC'), ('DEF'), ('XYZ');
-- OU
UPDATE tbl
SET title = lower(title);
Query returned successfully: 3 rows affected, 31 ms execution time.
Qu'est-ce qu'on peut faire si on veut récupérer le nombre d'enregistrements affectés par la commande (comme ce fût le cas pour moi aujourd'hui) ?
Il suffit de faire exécuter la requête SQL à l'intérieur d'une fonction PostgreSQL et d'utiliser immédiatement après une instruction du langage PL/pgSQL qu'on attribue à une variable.
CREATE OR REPLACE FUNCTION insert_some_rows() RETURNS integer AS
$BODY$
DECLARE
cnt integer;
BEGIN
UPDATE tbl
SET title = lower(title);
// c'est ici que ça se passe
GET DIAGNOSTICS cnt := ROW_COUNT;
RETURN cnt;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE