2011-05-03 3 views
1

J'aime appeler une fonction PL/pgSQL stockée de la même manière qu'avec PERFORM en ignorant les résultats, mais à partir de SQL brut. Comment puis-je réaliser cela? J'utilise actuellement SELECT pour exécuter la fonction, mais cela imprime des données sur la console dont je n'ai pas besoin.Appel de la fonction PL/pgSQL en ignorant les résultats

J'ai pensé à désactiver la sortie du client pour des instructions spécifiques SELECT, mais je ne trouve aucun paramètre client pour cela. Peut-être qu'il y a une meilleure façon de faire ce genre d'appels.

+0

Quel client utilisez-vous (psql, ...) ou est-ce dans un programme (Java)? –

+0

Je l'utilise dans un script SQL qui est exécuté par le client 'psql', en passant le nom de fichier avec le commutateur' -f'. – NagyI

Répondre

1

Il n'existe aucune fonctionnalité de ce type dans sql simple. Ce que vous pouvez faire, c'est que la fonction ne retourne rien.

+1

Changé mon en-tête de fonction pour retourner rien ('RETURNS integer' ->' RETURNS void'), mais si j'appelle la fonction je reçois toujours un deux liner: add_translation ------------ ----- (1 row) Ma fonction manipule une chaîne de traduction dans une table (la met à jour ou l'insère comme nouvelle). – NagyI

+0

rendre la fonction return setof quelque chose (int4 par exemple), puis ne rien retourner. il sera aussi proche de "ne retourne rien" que possible –

+1

J'ai fait ce que vous avez suggéré, changé 'RETURNS void' en' RETURNS setof int4' et supprimé toutes les lignes RETURN de la fonction. Je reçois toujours la table à une colonne mais cette fois avec (0 lignes) à la fin. – NagyI

0

Voici un hack sale, j'ai juste trouvé; fond est, je dois appeler une fonction, mais spécifiez une instruction UPDATE, SELECT pas ... peut-être votre arrière-plan est le même ... Je spécifié ma mise à jour comme suit:

UPDATE sometable_doesnt_matter 
SET some_comlumn=some_comlumn 
WHERE (select my_function = 1); 

Et ma fonction Toujours renvoie l'entier 1.

Ofc je vais changer le code pour qu'il fonctionne également avec un SELECT, mais maintenant, comme un correctif, cela fonctionne pour moi.

Questions connexes