Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1180 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle 8i] requête paramétrable ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle 8i] requête paramétrable ?

n°1068851
manuhard
Le bois ne rend pas les coups
Posté le 02-05-2005 à 15:03:44  profilanswer
 

Bonjour,
 
J'ai 4 paramètres en entrée dans une requête SQL, et ces 4 paramètres sont facultatifs.
Comme je n'ai pas envie de réécrire une clause WHERE à chaque fois que j'ai des paramètres renseignés ou pas, je me posais la question de savoir s'il y avait un moyen en PLSQL ou en SQL de faire une requête générique ?
 
Si au moins un des paramètres n'est pas alimenté, la restriction va se faire sur :
monChamp = '', ou monChamp = NULL
Donc je n'obtiendrai pas le résultat désiré.
 
La question est d'autant plus importante que le nombre de paramètres à renseigner est important : si j'ai 10 paramètres à saisir, ça me parrait un peu long pour construire la requête SQL si je dois faire des tests conditionnels.
 
 
Merci d'avance !

mood
Publicité
Posté le 02-05-2005 à 15:03:44  profilanswer
 

n°1068861
___
Posté le 02-05-2005 à 15:22:18  profilanswer
 

salut
 
tu peux faire une procédure PLSQL si tu es sous Oracle, tu aura ta fonction à laquelle tu passeras tes parametres.
 
ca ressamble à ca :
PROC ins(nom IN VARCHAR2,...) AS (ou IS)
INSERT INTO table VALUES(nom,...)
END

n°1068869
manuhard
Le bois ne rend pas les coups
Posté le 02-05-2005 à 15:28:21  profilanswer
 

Est-ce que tu peux préciser s'il te plait ?

n°1068880
___
Posté le 02-05-2005 à 15:36:24  profilanswer
 

1) utilises-tu Oracle ?
 
2) si oui, c'est comme si tu écrivais une fonction:
 
CREATE PROCEDURE mon_insertion(Parametre1 IN format, autres parametres en IN=ENTREE)    format=VARCHAR2,NUMBER,...
BEGIN
   INSERT INTO ta_table values (parametre1, parametre2,... ce que tu veux);
END
 
après pour l'utiliser:
 
EXEC mon_insertion('toto','rue des fleurs',55555,'Paris....);
 
voila
 
bonne chance

n°1068894
manuhard
Le bois ne rend pas les coups
Posté le 02-05-2005 à 15:59:11  profilanswer
 

Je travaille bien sous Oracle.
 
Question sur ta méthode :
Qu'est-ce que mettre les valeurs des paramètres dans une table apporte ?
 
Est-ce que ça facilite la construction de la clause WHERE de la requête par la suite ?
 
A quoi correspond cette procédure ?
EXEC mon_insertion('toto','rue des fleurs',55555,'Paris....);  
 

n°1068904
___
Posté le 02-05-2005 à 16:04:38  profilanswer
 

le exec te permet d'exectuter ta procédure.
 
en regardant des cours ou exmples sur le PLSQL, tu pourras voir que dans ta procédure tu peux mettre des conditions:
IF nom IS NULL
THEN requete1
else requete avec nom
END IF;
 
j'espere que c'est bien un truc comme ca que tu cherches !

n°1068920
manuhard
Le bois ne rend pas les coups
Posté le 02-05-2005 à 16:19:18  profilanswer
 

Merci de ta réponse, mais c'est justement ce que je ne recherche pas : je veux éviter les conditions IF THEN ELSE.
 

n°1069597
Beegee
Posté le 02-05-2005 à 22:59:46  profilanswer
 

Peut-être qu'en utilisant des NVL et DECODE tu pourra traiter les cas que tu envisages.
 
NVL(TOTO, 'TATA') : renvoies TOTO si non NULL, et 'TATA' sinon.
 
DECODE( expression , search , result [, search , result]... [, default] ) : cf ici http://www.techonthenet.com/oracle [...] decode.htm
 
A mon avis tu cherchais la fonction DECODE ... :)

n°1070936
moi23372
Posté le 03-05-2005 à 20:35:57  profilanswer
 

personnellement je pense que la meilleure solution c'est encore la procédure plsql, c'est quand mm nettement plus puissant qu'une requete sql normal même si c'est vrai que la fonction nvl et decode peut aidé dans ce cas la...
 
par contre, je ne comprends pas pkoi:
EXEC mon_insertion('toto','rue des fleurs',55555,'Paris....);  
 
le EXEC n'a rien a faire la, en sql il suffit d'appelé simplement la procédure par son nom. EXEC est parfois utilisé dans dans des programmes pro C ou pro Cobol mais pas de cette façon la non plus.  
Sous sqlplus ou autre interface sql, il suffit de simplement appelé la fonction ou la procédure.

n°1071236
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-05-2005 à 07:28:46  profilanswer
 

Perso, j'utilise un truc sous SQL Server, qui est pas forcément super terrible, mais bon, ça à l'avantage de marcher :D
 
Je n'ai par contre pas testé avec des requêtes paramètrées, je préfère passer par une PS. Voici un petit exemple :
 

Code :
  1. CREATE PROCEDURE DaArjunaProc
  2. (
  3.     @groumpf as integer = 0
  4. )
  5. AS
  6. BEGIN
  7.     select heure
  8.     from jour
  9.     where (reveil = @groumpf or @groumpf = 0)
  10. END
  11. GO


 
=> Là, ça me sort les infos en fonction du paramètre @groumpf, à moins que ce dernier ne soit pas fourni (à ce moment, il prend la valeur par défaut 0), auxquel cas le @groumpf = 0 est toujours vrai.
 
PS: Mise à part la syntaxe qui diffère légèrement entre T-SQL et PL/SQL, les deux langages sont parfaitement utilisables.
 
Ensuite, pour éxécuter le bignou, ça donne :
 

Code :
  1. -- Test avec @groumpf
  2. exec DaArjunaProc 5;
  3. -- Test sans @groumpf
  4. exec DaArjunaProc;

mood
Publicité
Posté le 04-05-2005 à 07:28:46  profilanswer
 

n°1077295
___
Posté le 10-05-2005 à 09:58:10  profilanswer
 

en réponse à moi22...
 
"le EXEC n'a rien a faire la"
 
il est nécessaire pour appeler une Procédure PL/SQL, comme décrit plus haut.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle 8i] requête paramétrable ?

 

Sujets relatifs
Requete surment toute beteSyntaxe de requête et lecture de recordset
Oracle 9i XMLTypeOracle 9i, pl/sql, autocommit
Echappement dans une requête[hibernate][oracle 10g]enregistrer un BLOB
[generics] un patron strategy paramétrablerequete sql asynchrone
requete boucle dans plan de salleConvertir requête Select en requête Update
Plus de sujets relatifs à : [Oracle 8i] requête paramétrable ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR