Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Interfaces de programmation
Interfaces de programmation Forum d'entraide sur l'utilisation des API Oracle : Pré-compilateurs, OCI, OCCI, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/08/2007, 11h10   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 6
Points : 2
Points : 2
Par défaut [ORACLE 8i] ORA-01036 / oci bind by name pour string

Bonjour,

Après avoir cherché dans pas mal d'endroits y compris dans la doc oracle, je trouve pas de solution... donc voilà le probleme:

Pour economiser des ressources de la base de données, je veux utiliser le binding (c'est pas très français mais bon)...

Code :
1
2
3
4
5
6
7
8
9
10
 
$stmt = OCIParse ($conn, $sql);
 
$prodcode = 717011;
$chaine = "CARW";
 
OCIBindByName($stmt, ":nombre", $prodcode);
OCIBindByName($stmt, ":chaine", $ttexcode);
 
OCIExecute($stmt, OCI_DEFAULT);
J'ai pas de souci pour le OCIBindByName si je renseigne un numérique, mais si c'est une chaine de caractère, je me prends l'erreur ORA-01036: numéro/nom de variable illégal à la ligne du OCIBindByName pour la chaine.
Peut etre y'a il un type à préciser, mais j'ai pas trouvé...

J'espère que j'ai été clair, c'est ma première participation dans ce forum,

Merci à tous pour votre aide

PS: Versions ->
Oracle 8i Release 8.1.7.0.0 - Production
PHP 4.3.3
mrfred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 11h30   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Quel est le contenu de:

Donnez-nous le code complet avec le contenu de $sql.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 11h46   #3
Invité de passage
 
Inscription : juillet 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 6
Points : 2
Points : 2
Hum... pardon, erreur de c/c tout à l'heure, voila la requête, et le résultat obtenu:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
$sql  = "SELECT count(*) ";
$sql .= "FROM ";
$sql .= "V_OUVRAGE vof, V_CONTRIBUTEUR vcf ";
$sql .= "WHERE ";
$sql .= "vof.CODE_ARTICLE = vcf.CODE_ARTICLE ";
$sql .= "AND ";
$sql .= "vcf.CODE_NATURE IN (20,21) ";
$sql .= "AND ";
$sql .= "vcf.NOM_CONTRIBUTEUR_APPAUV LIKE '".":chaine"."%' ";
$sql .= "AND ";
$sql .= "vof.TITRE_APPAUVRI IS NOT NULL ";
$sql .= "AND ";
$sql .= "vof.EDIG_IDENT= :nombre";
 
$stmt = OCIParse ($conn, $sql);
 
$prodcode = 76;
$ttexcode = "A";
 
OCIBindByName($stmt, ":nombre", $prodcode);
OCIBindByName($stmt, ":chaine", $ttexcode);
 
OCIExecute($stmt, OCI_DEFAULT);
Citation:
PHP Warning: ocibindbyname(): OCIBindByName: ORA-01036: numéro/nom de variable illégal in D:\***\web\***\***\catalogue.php on line 118
La ligne 118 c'est:

Code :
1
2
 
OCIBindByName($stmt, ":chaine", $ttexcode);
mrfred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h01   #4
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Essayez de supprimer les simples quotes dans:

et de mettre le "%" et les "." dans:

Il doit suffire d'avoir:

Code :
$sql .= "vcf.NOM_CONTRIBUTEUR_APPAUV LIKE :chaine ";
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h03   #5
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Je dirais que pour une chaine, la longueur est obligatoire !
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h06   #6
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Peut-être mais je ne pense pas que c'est la cause de ORA-01036:

Citation:
ORA-01036: illegal variable name/number
Cause: Unable to find bind context on user side
Action: Make sure that the variable being bound is in the sql statement.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h11   #7
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Ou
Code :
$sql .= "vcf.NOM_CONTRIBUTEUR_APPAUV LIKE :chaine||'%' ";
si chaine ne se termine pas par '%'
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 12h11   #8
Invité de passage
 
Inscription : juillet 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 6
Points : 2
Points : 2
Merci à vous deux, le problème est résolu , et sinon j'avais déjà testé de renseigner la longueur de la chaine dans OCIBindByName, mais ça avait pas marché.

PS: Effectivement, Garuda, c'est pas mal ça...
mrfred est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h14.


 
 
 
 
Partenaires

Hébergement Web