Procédure stocké + clause like %

Signaler
Messages postés
56
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
2 novembre 2009
-
Messages postés
56
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
2 novembre 2009
-
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

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
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
Messages postés
56
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
2 novembre 2009

tu peu me modifier le code de ma procédure stp??
Messages postés
56
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
2 novembre 2009

Merci bien sa fonctionne mnt
merci
Messages postés
56
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
2 novembre 2009

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
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
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
Messages postés
56
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
2 novembre 2009

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
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
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
Messages postés
56
Date d'inscription
mercredi 5 décembre 2007
Statut
Membre
Dernière intervention
2 novembre 2009

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