2009-08-27 5 views
12

Comment écrire une simple procédure stockée dans postgres qui ne renvoie aucune valeur? Même avec un type de retour vide lorsque j'appelle la procédure stockée, je récupère une seule ligne.Comment écrire une procédure stockée postgres qui ne retourne rien?

CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$ 
BEGIN 
    DELETE from test_table where id = in_id; 
END; 
$$ LANGUAGE plpgsql; 

Répondre

7

Ce n'est pas la fonction qui renvoie la valeur, il est le SELECT que vous avez utilisé pour l'appeler. S'il ne renvoie aucune ligne, il n'exécute pas votre fonction.

4

Vous vous débrouillez bien. Vous n'avez pas besoin d'ajouter autre chose.

Le résultat de la ligne est null, il s'agit donc d'un retour vide.

Je ne pense pas qu'il y ait quelque chose que vous puissiez faire à ce sujet. Vérification de mes fonctions vides tous sont comme les vôtres.

renvoie void sous la forme $$ et aucune instruction return dans le bloc de code.

+1

Mais comment cette méthode soit appelée? – Peymankh

+0

SELECT * FROM void_function(); –

+0

Il est peut-être plus facile d'utiliser 'PERFORM void_function();'. – Cromax

6

Vous pouvez obtenir "rien retourné" en abusant des fonctions définies-retour:

Fonction simple:

create function x() returns setof record as $$ 
begin 
return; 
END; 
$$ language plpgsql; 

vous pouvez maintenant:

# select x(); 
x 
--- 
(0 rows) 

Dans le cas où il ne fonctionne pas pour vous (désolé, j'emploie 8.5), essayez avec cette approche:

# create function x (OUT o1 bool, OUT o2 bool) returns setof record as $$ 
begin 
return; 
END; 
$$ language plpgsql; 
CREATE FUNCTION 

Les paramètres ne sont pas pertinentes, mais:

  • Vous avez besoin> 1 d'entre eux
  • Ils doivent être nommé

Et maintenant, vous pouvez:

# select * from x(); 
o1 | o2 
----+---- 
(0 rows) 
Questions connexes