Créer des fonctions avec SQL

Bonsoir!

Je me demandais si il était possible, avec SQL d’Oracle, de créer une fonction qui ne renvoie rien (une sorte de void)?

Aussi, est-il possible de déclarer des variables dans une fonction? J’ai bien essayé avec DECLARE mais Oracle ne semble pas apprécier…

Mes recherches sur Internet ne m’ont pas beaucoup aidé.

Voici la fonction, qui sert à rien, et qui est non fonctionelle, que j’ai tenté d’écrire pour le test:CREATE FUNCTION Test (nbre1 NUMBER) DECLARE nbre2 NUMBER; BEGIN nbre2=0; END;

Je veux qu’elle ne renvoie rien, et je veux déclarer une variable interne. Je n’y arrive pas, Oracle me renvoie une erreur à la création.

De plus, y a t-il moyen d’avoir un détail des erreurs lorsque l’on crée une fonction erronée? Parce que les “Warning: Function created with compilation errors.” ne m’aident pas beaucoup…

Je vous remercie!
Bonne soirée.

Une fonction qui ne renvoie rien, cela s’appelle une procédure B)
Et on peut déclarer des procédures sans problème.
Par contre, je n’ai pas la syntaxe correcte sous la main, si personne d’autre n’a répondu d’ici demain, j’en posterai un exemple valide.

Pour ton exemple et de mémoire, ton code devient

CREATE PROCEDURE Test (nbre1 NUMBER) DECLARE nbre2 NUMBER; BEGIN nbre2=0; END;

Je dirais qu’il te manque un ‘IS’ ou ‘AS’ je sais jamais.

CREATE PROCEDURE Test (nbre1 NUMBER) IS DECLARE nbre2 NUMBER; BEGIN nbre2=0; END;

show error; pour voir où est l’erreur.

Bien vu, il manque aussi le

CREATE PROCEDURE Test (nbre1 [b]IN[/b] NUMBER) IS ... END;
ou

CREATE PROCEDURE Test (nbre1 [b]OUT[/b] NUMBER) IS ... END;
suivant que le paramètre est en entrée ou en sortie.

Ah, je n’avais pas compris ce qu’étaient les procédures.

Je teste tout ça demain, et je vous remercie de vos réponses.

[quote]show error; pour voir où est l’erreur.[/quote]Je me disais bien qu’il y avait un truc B)

Bonjour,
j’ai une autre petite question en rapport avec les procédures.

Dans une procédure je fais une requete, et si la table en question est vide, une exception NO_DATA_FOUND est générée par Oracle (normal).

Je gère donc les exceptions à la fin de ma procédure, et j’aimerai, lorsque je détecte un NO_DATA_FOUND, mettre simplement une variable à 0 et continuer l’exécution de la procédure.

J’ai essayé quelque chose dans ce genre:[...] EXCEPTION WHEN NO_DATA_FOUND THEN valeur := 0; [...]Mais ça ne fonctionne pas, la procédure se termine après avoir exécuté valeur := 0;.

Pour résumer, il ne faut pas que ma procédure se termine si une requete ne renvoie rien.

Comment puis-je procéder?

Il faut entourer ta requête dans un bloc pl/sql
Par exemple

BEGIN ... du code pl/sql ... BEGIN select 1 from dual; EXCEPTION when no_data_found then valeur :=0; END; ... du code pl/sql ... EXCEPTION WHEN OTHER THEN RAISE; END

Je teste ça desuite.

EDIT
Merci Joeman, ça fonctionne!