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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Mon update sql oracle plante ?!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mon update sql oracle plante ?!

n°1871956
molki
Posté le 10-04-2009 à 12:35:52  profilanswer
 

Bonjour
 
Je suis en oracle 10g, je travaille en php 5, je tente de concaténer une variable php classique avec un champ de type LONG sur Oracle.
Voilà la commande sql au moment de l'éxecution :  
 
UPDATE UP7.INSATER_DOSSIER SET PUBLICATIONS=PUBLICATIONS || 'Communication avec actes ' WHERE NUMERODOSSIER='16250TT17000'
 
Voici le message d'erreur...
 
[Oracle][ODBC][Ora]ORA-00932: inconsistent datatypes: expected NUMBER got LONG'
 
jé na comprendu rien du tout, Pourquoi le message parle de NUMBER ? J'ai fait pleins d'essais, impossible de concaténer de cette mainère.
Quelqu'un à une solution ou une explication ?
 
le code php :
$sql="UPDATE UP7.INSATER_DOSSIER SET PUBLICATIONS=PUBLICATIONS || '$pub' WHERE NUMERODOSSIER='$ater_dossier'";

mood
Publicité
Posté le 10-04-2009 à 12:35:52  profilanswer
 

n°1871964
skeye
Posté le 10-04-2009 à 12:58:58  profilanswer
 

quel est le type de ton champ publications?


---------------
Can't buy what I want because it's free -
n°1871983
molki
Posté le 10-04-2009 à 13:46:31  profilanswer
 

C'est un type LONG (je ne sais plus exactement la taille je crois que c'est du 32767). Au moment de l'execution, ici, elle contient la même chose que dans le literal que je passe.

n°1871984
skeye
Posté le 10-04-2009 à 13:50:27  profilanswer
 

molki a écrit :

C'est un type LONG (je ne sais plus exactement la taille je crois que c'est du 32767). Au moment de l'execution, ici, elle contient la même chose que dans le literal que je passe.


c'est pas similaire à un blob pour oracle, un long? si oui il y a des fonctions spécifiques pour les traitements de ces champs, tu ne peux ps les manipuler aussi simplement qu'un varchar ou un int...


---------------
Can't buy what I want because it's free -
n°1871989
macgawel
Posté le 10-04-2009 à 13:59:53  profilanswer
 

- Tu as essayé de faire un echo $sql; et ensuite de passer ta requête directement dans Oracle ?
- Essaye, toujours sous Oracle, d'éclater ta requête sur plusieurs lignes. Normalement Oracle devrait t'indiquer le numéro de la ligne qui ne va pas. Ca t'aidera à voir où est l'erreur...
- Tu es sûr que le champ PUBLICATIONS est bien un long ?
- NUMERODOSSIER, c'est quel type ?

n°1872005
molki
Posté le 10-04-2009 à 14:29:41  profilanswer
 

SQL> desc UP7.INSATER_DOSSIER
 Nom                                       NULL ?   Type
 ----------------------------------------- -------- ---------------
 NUMERODOSSIER                             NOT NULL VARCHAR2(50)
 DATECREATION                                       DATE
 CIVILITE                                           VARCHAR2(12)
 NOMPATRON                                          VARCHAR2(50)
 NOMMARITAL                                         VARCHAR2(50)
 PRENOM                                             VARCHAR2(50)
 SITUATIONFAM                                       VARCHAR2(50)
 DATENAISSANCE                                      DATE
 LIEUNAISSANCE                                      VARCHAR2(50)
 NATIONALITE                                        VARCHAR2(3)
 ADRESSE1                                           VARCHAR2(50)
 ADRESSE2                                           VARCHAR2(50)
 CODPOS                                             VARCHAR2(10)
 VILLE                                              VARCHAR2(50)
 PAYS                                               VARCHAR2(50)
 TELEPHONE                                          VARCHAR2(10)
 EMAIL                                              VARCHAR2(50)
 ANTECEDANTATER                                     VARCHAR2(50)
 SITUATION                                          VARCHAR2(50)
 ALREDC                                             VARCHAR2(50)
 ALREDO                                             VARCHAR2(50)
 TYPEFONCTION                                       VARCHAR2(2)
 COMPLET                                            VARCHAR2(1)
 TITRE_THESE                                        VARCHAR2(255)
 LABO_STATUT                                        VARCHAR2(50)
 DIRECTEUR_LABO                                     VARCHAR2(70)
 DATE_SOUTENANCE                                    DATE
 POSTDOC                                            VARCHAR2(50)
 PREMIER_AUTEUR                                     VARCHAR2(50)
 AUTRE_POSITION                                     VARCHAR2(50)
 SOUMISES                                           VARCHAR2(50)
 CONGRES                                            VARCHAR2(50)
 AUTRE                                              VARCHAR2(4000)
 PROJET                                             VARCHAR2(50)
 PUBLICATIONS                                       LONG
 FORMATION                                          VARCHAR2(4000)
 
Sous sqlplus :  
 
SQL> UPDATE UP7.INSATER_DOSSIER SET PUBLICATIONS=PUBLICATIONS || 'Communication avec actes ' WHERE N
UMERODOSSIER='16250TT17000'  
  2  ;
UPDATE UP7.INSATER_DOSSIER SET PUBLICATIONS=PUBLICATIONS || 'Communication avec actes ' WHERE NUMERO
                                            *
ERREUR à la ligne 1 :
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
 
Tout pareil, l'étoile est sous =PUBLICATION (c'est tout décalé sur le forum...)


Message édité par molki le 10-04-2009 à 14:30:58
n°1872007
skeye
Posté le 10-04-2009 à 14:33:26  profilanswer
 

skeye a écrit :


c'est pas similaire à un blob pour oracle, un long? si oui il y a des fonctions spécifiques pour les traitements de ces champs, tu ne peux ps les manipuler aussi simplement qu'un varchar ou un int...



---------------
Can't buy what I want because it's free -
n°1872013
couak
Posté le 10-04-2009 à 14:38:42  profilanswer
 

il n'est plus conseillé d'utiliser le type LONG, surtout depuis la version 10g
si tu peux, utilises un champ de type CLOB
avec un champ de type CLOB ta requête fonctionnera, sinon il faut utilsier des fonctions de manipulations de données de type LONG mais là j'ai un trou de mémoire

n°1872014
molki
Posté le 10-04-2009 à 14:40:25  profilanswer
 

je ne suis pas franchement DBA, meis j'ai vaguement entendu parler de blob, ok je vais tâcher de chercher par là.
 
En fait, en ASP, je n'avais aucun problème pour updater ce champ, ça ne marche plus depuis je j'ai migré l'application en PHP, je suis tout bonnement limité à 4000 caractères en update. Je tentais donc une solution de concat car mon DBA est en vacances pour 2 mois...

n°1872116
couak
Posté le 10-04-2009 à 17:10:12  profilanswer
 

dans ce cas là c'est pas un problème de SQL mais un problème avec PHP
regarde de ce côté : http://forum.hardware.fr/hfr/Progr [...] 8360_1.htm

mood
Publicité
Posté le 10-04-2009 à 17:10:12  profilanswer
 

n°1872542
john clees​e
Posté le 13-04-2009 à 21:55:48  profilanswer
 

Bonjour,  
 
le problème est que tu veux concaténer un LONG (le champ PUBLICATION) avec une chaine de caractères ('Communication avec actes ').
 
Comme dit plus haut, le type LONG n'est plus recommandé à partir de la 10g.
 
Je pense que le mieux serait de transformer ce champ en CLOB, puis d'utiliser le package DBMS_LOB pour faire une concaténation correcte.


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

  Mon update sql oracle plante ?!

 

Sujets relatifs
[Oracle Forms] Problème de cache[RESOLU][ORACLE] "Personnalisation" d'un ORDER
[PHP 5] base de données mysql : commande 'UPDATE' ?Update d'une table sur conditions dans une autre table
Admin websphere connexion JNDI pour oracle [MySQL 5] Champs pleins après UPDATE
migrer une base de données acces vers oracleQuoi choisir => Oracle ? MySQL ? Microsoft SQL ?
Installation de sql server express 2005 plante mon pcAlerte doublons + update
Plus de sujets relatifs à : Mon update sql oracle plante ?!


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)