Procédure stocké + clause like %

cs_djerbino Messages postés 56 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 2 novembre 2009 - 21 avril 2008 à 12:07
cs_djerbino Messages postés 56 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 2 novembre 2009 - 22 avril 2008 à 11:40
bonjour je galere depuis pas mal de temp et je je compte sur votre aide

je suis entrain de realiser une procédure stocké sous oracle 9i mais jai un probleme dans la clause like

voici le code

/*********creation de la procédure(dans le console plsql)**************/

create or replace procedure d

(

nom IN varchar,

prenom OUT varchar,villa OUT varchar

)

is

BEGIN

  SELECT adresse,ville INTO prenom,villa FROM touhami.client

         WHERE nom_societe LIKE '%'+ nom +'%' ;

end;

jusqua la tous va bien et j'ai comme résultat procédure créé

mais dans l'appel je trouve aucun enregistrement par contre si
j'utilse cette ligne : WHERE nom_societe LIKE  nom  ; tous va bien mais
jai besoin de '%'

est ce que quelqu'un a une idée??

/*********appel de la procédure(dans le code behind)**************/
        Dim MaChaineDeConnection As String "provider MSDAORA ; data source = recrut;User ID=touhami;Password=glmaster;Unicode=True"
        Dim MaConnexion As New OleDbConnection(MaChaineDeConnection)
        Dim MaRequete As String = "d"
        Dim MaCommande As New OleDbCommand(MaRequete, MaConnexion)
        MaCommande.CommandType = CommandType.StoredProcedure
        Dim MonParametre, MonParametre1 As OleDbParameter
      
        MonParametre = MaCommande.Parameters.Add("nom", OleDbType.VarChar, 100)            'defenir le premier variable  d'entré
        MonParametre.Value = "infoweb business services"
   
        MonParametre = MaCommande.Parameters.Add("prenom", OleDbType.VarChar, 20)           'defenir le premier variable de sortie
        MonParametre.Direction = ParameterDirection.Output
      
        MonParametre1 = MaCommande.Parameters.Add("villa", OleDbType.VarChar, 20)          'defenir le deuxieme variable de sortie

        MonParametre1.Direction = ParameterDirection.Output

        MaConnexion.Open()
        MaCommande.ExecuteNonQuery()
        Response.Write((MonParametre.Value))                                         'affiche la premiere variable
         Response.Write((MonParametre1.Value))                                       'affiche la deuxieme variable
        MaConnexion.Close()

pour le premier cas j'ai les résultat affiché mais avec like '%' + nom +'%' sa me donne rien
d'apres mes recherche la clause like '%' + nom +'%' s'éxécute sous sql server mais c quoi son équivalent sous oracle 9 i
merci pour votre reponses

8 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 avril 2008 à 15:18
Salut,

Ce qui peut être fait c'est la place d'envoyer nom tu envoie 'nom%' comme parameter et tu l'enleves le % de ta procedure stockée.

Bon coding
0
cs_djerbino Messages postés 56 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 2 novembre 2009
21 avril 2008 à 15:40
tu peu me modifier le code de ma procédure stp??
0
cs_djerbino Messages postés 56 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 2 novembre 2009
21 avril 2008 à 15:48
Merci bien sa fonctionne mnt
merci
0
cs_djerbino Messages postés 56 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 2 novembre 2009
21 avril 2008 à 18:41
sa fonctionne dans le cas ou ma requete retourne un seul variable mais le proleme quand ma procédure retourne plusieur valeurs


que doit-je faire


modifier ma procédure??

create or replace procedure d
(
nom IN varchar,
prenom OUT varchar,villa OUT varchar
)
is

BEGIN
  SELECT adresse,ville INTO prenom,villa FROM touhami.client
         WHERE nom_societe LIKE  nom 
end;

que faire si jai plusieur adresse et ville en résultat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 avril 2008 à 18:53
Salut

C'est pas la bonne maniere de lire

Il faut faire un executeReader
et apres une boucle sur le datareader

http://msdn2.microsoft.com/fr-fr/library/9kcbe65k(VS.80).aspx

Bon coding
0
cs_djerbino Messages postés 56 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 2 novembre 2009
22 avril 2008 à 10:16
merci j'apprécie vraiement ton aide
mais j'ai toujour le meme probleme
voici mon code complet

/****************corp de procédure**********************/

create or replace procedure recherche_simple_sans_ville
(
titre IN varchar,metier OUT varchar,objectif OUT varchar,region OUT varchar,ville OUT varchar,type_de_contrat OUT varchar,duree OUT varchar,qualification OUT varchar,langue OUT varchar,publication OUT varchar


)
is


BEGIN
  SELECT metier,objectif,region,ville,type_de_contrat,duree,qualification,langue,publication INTO metier,objectif,region,ville,type_de_contrat,duree,qualification,langue,publication  FROM touhami.cv
         WHERE metier LIKE titre ;
end;

/**************code asp.net(vb.net) appel de procédure*********/



Dim
MaChaineDeConnection

As



String
"provider MSDAORA ; data source = recrut;User ID=touhami;Password=glmaster;Unicode=True"








Dim
MaConnexion

As



New
OleDbConnection(MaChaineDeConnection)


Dim
MaRequete

As



String
=

"recherche_simple_sans_ville"






Dim
MaCommande

As



New
OleDbCommand(MaRequete, MaConnexion)MaCommande.CommandType = CommandType.StoredProcedure


Dim
MonParametre, MonParametre1, MonParametre9, MonParametre2, MonParametre3, MonParametre4, MonParametre5, MonParametre6, MonParametre7, MonParametre8

As
OleDbParameterMonParametre = MaCommande.Parameters.Add(


"titre"
, OleDbType.VarChar, 100)MonParametre.Value =


"%"
& titre.Text &

"%"

MonParametre9 = MaCommande.Parameters.Add(




"metier"
, OleDbType.VarChar, 20)MonParametre9.Direction = ParameterDirection.Output

MonParametre1 = MaCommande.Parameters.Add(


"objectif"
, OleDbType.VarChar, 20)MonParametre1.Direction = ParameterDirection.Output

MonParametre2 = MaCommande.Parameters.Add(


"region"
, OleDbType.VarChar, 20)MonParametre2.Direction = ParameterDirection.Output

MonParametre3 = MaCommande.Parameters.Add(


"ville"
, OleDbType.VarChar, 20)MonParametre3.Direction = ParameterDirection.Output

MonParametre4 = MaCommande.Parameters.Add(


"tupe_de_contrat"
, OleDbType.VarChar, 20)MonParametre4.Direction = ParameterDirection.Output

MonParametre5 = MaCommande.Parameters.Add(


"duree"
, OleDbType.VarChar, 20)MonParametre5.Direction = ParameterDirection.Output

MonParametre6 = MaCommande.Parameters.Add(


"qualification"
, OleDbType.VarChar, 20)MonParametre6.Direction = ParameterDirection.Output

MonParametre7 = MaCommande.Parameters.Add(


"langue"
, OleDbType.VarChar, 20)MonParametre7.Direction = ParameterDirection.Output

MonParametre8 = MaCommande.Parameters.Add(


"publication"
, OleDbType.VarChar, 20)MonParametre8.Direction = ParameterDirection.Output

MaConnexion.Open()


Dim
myReader

As
OleDbDataReader = MaCommande.ExecuteReader()

lorsque jai un seul enregistrement dans la table CV pas de probleme mais quand je possede plusieur enregistrement voici le message d'erreur qui s'affiche:
ORA-01422: l'extraction exacte ramène plus que le nombre de lignes demandé
ORA-06512: à "TOUHAMI.RECHERCHE_SIMPLE_SANS_VILLE", ligne 9
ORA-06512: à ligne 1
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
22 avril 2008 à 11:37
Comme dis dans mon précédent mail,
il ne faut pas lire les enregistrements par les parametres de sortie mais par l'execute reader.

http://xo.developpez.com/tutoriel/dotnet/oracle/odt/

Chapitre 6

Bon coding
0
cs_djerbino Messages postés 56 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 2 novembre 2009
22 avril 2008 à 11:40
bon j'ai trouvé la solution de cet erreur en modifiant ma procédure comme suit:(avec les rowtype)

create or replace procedure recherche_simple_sans_ville
(
titre IN varchar,resultat OUT cv%Rowtype


)
is


BEGIN
  SELECT * INTO resultat FROM touhami.cv
         WHERE metier LIKE titre ;
end;

mais j'ai un autre probleme lors de l'appel de cette procédure
le problème est dans la ligne suivante:


MonParametre2 = MaCommande.Parameters.Add("resultat", OleDbType.VarChar, 20)
 qui a pour message d'erruer le suivant


ORA-06550: Ligne 1, colonne 7 :
PLS-00306: numéro ou types d'arguments erronés dans appel à 'RECHERCHE_SIMPLE_SANS_VILLE'
ORA-06550: Ligne 1, colonne 7 :
PL/SQL: Statement ignored
Ce fournisseur ne prend pas en charge les procédures/fonctions stockées PL/SQL avec les arguments RECORD ou TABLE.

alors quoi faire??
merci
0
Rejoignez-nous