IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Problème UPDATE avec un champ BLOB [10g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut Problème UPDATE avec un champ BLOB
    Bonjour à tous

    Je me tourne vers vous car j'ai un soucis avec une requête et je n'arrive pas à voir d’où ça viens.

    J'utilise le code suivant pour faire un UPDATE de ma ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    -- #################################### updateBlob ####################################
    	PROCEDURE updateBlob( tablename varchar2,abbreviation varchar2,sequenceKey number,dataKey number,clobname varchar2,name varchar2,descr varchar2,fileType varchar2,category varchar2,data BLOB, url varchar2, print number )
    	is
    		sqlStatement  VARCHAR2(2000);
    	BEGIN			
     
    		sqlStatement := 'UPDATE ' || tablename || ' SET ';
     
    		sqlStatement := sqlStatement || abbreviation || '_' || tablename || '_PK =' || dataKey || ',';
    		sqlStatement := sqlStatement || abbreviation || '_CLOB_NAME = ' || clobname || ',';
    		sqlStatement := sqlStatement || abbreviation || '_NAME = ' || name || ',';		
    		sqlStatement := sqlStatement || abbreviation || '_DESCRIPTION = ' || descr || ',';	
    		sqlStatement := sqlStatement || abbreviation || '_BLOB = :blob' || ',';
    		sqlStatement := sqlStatement || abbreviation || '_URL = ' || url || ',';
    		sqlStatement := sqlStatement || abbreviation || '_PRINTABLE = ' || print || ',';
    		sqlStatement := sqlStatement || abbreviation || '_FILE_TYPE ='  || fileType || ',';
    		sqlStatement := sqlStatement || abbreviation || '_CATEGORY = ' || category;
     
    		sqlStatement := sqlStatement || ' WHERE ' || 'PK_' || tablename || '_BLOB = ' || sequenceKey;
     
    		EXECUTE IMMEDIATE sqlStatement using data;
     
    	END updateBlob;
    Lorsque que je crée le package dans lequel se trouve cette procédure tout va bien. Par contre à l'exécution tout va mal !
    j'ai l'erreur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (oracle.jbo.JboException) JBO-29000: ORA-00933: la commande SQL ne se termine pas correctement
    ORA-06512: à "CW755.PACK_BLOB", ligne 435
    ORA-06512: à ligne 1
    Je sais que le champ BLOB met le bazar, j'ai donc essayé de tourner cette requête dans tous les sens mais rien n'y fait !
    Je ne sais pas(plus) trop quoi en penser..

    Si vous avez des idées, merci d'avance

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pour le debug affichez votre requête via dbms_output, ça vous permet de comprendre les erreurs à l'exécution de la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> begin
      2   updateBlob('tablename','abbreviation',1,1,'clobname','name','descr','fileType','category',null, 'url',0);
      3  end;
      4  /
     
    UPDATE tablename SET abbreviation_tablename_PK =1,abbreviation_CLOB_NAME = clobname,abbreviation_NAME = name,abbreviation_DESCRIPTION = descr,abbreviation_BLOB = :blob,abbreviation_URL = url,abbreviation_PRINTABLE = 0,abbreviation_FILE_TYPE =fileType,abbreviation_CATEGORY = category WHERE PK_tablename_BLOB = 1
     
    PL/SQL procedure successfully completed

  3. #3
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Effectivement j'ai oublié de doubler les quotes pour les chaines de caractères dans la construction..

    Voici la procédure finale si ça peut aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     -- #################################### updateBlob ####################################
    	PROCEDURE updateBlob( tablename varchar2,abbreviation varchar2,sequenceKey number,dataKey number,clobname varchar2,name varchar2,descr varchar2,fileType varchar2,category varchar2,blobData BLOB, url varchar2, print number )
    	IS
    		sqlStatement  VARCHAR2(2000) := NULL;
     
    		PROCEDURE concatQuery( query IN OUT VARCHAR2, colBaseName VARCHAR2, colValue VARCHAR2, quote INTEGER )
    		IS
    			separator CHAR;
    		BEGIN
    			IF colValue IS NOT NULL THEN
    				IF query IS NOT NULL THEN
    					query := query || ', ';
    				END IF;
     
    				IF quote = 0 THEN
    					separator := '';
    				ELSE
    					separator := '''';
    				END IF;
     
    				query := query || abbreviation || '_' || colBaseName || ' = ' || separator || REPLACE( colValue, '''', '''''' ) || separator;
    			END IF;
    		END concatQuery;
    	BEGIN			
    		concatQuery( sqlStatement, tablename || '_PK', dataKey, 0 );
    		concatQuery( sqlStatement, 'CLOB_NAME', clobname, 1 );
    		concatQuery( sqlStatement, 'NAME', name, 1 );		
    		concatQuery( sqlStatement, 'DESCRIPTION', descr, 1 );	
    		concatQuery( sqlStatement, 'BLOB', ':blob', 0 );
    		concatQuery( sqlStatement, 'URL', url, 1 );
    		concatQuery( sqlStatement, 'PRINTABLE',print, 0 );
    		concatQuery( sqlStatement, 'FILE_TYPE', fileType, 1 );
    		concatQuery( sqlStatement, 'CATEGORY', category, 1 );
     
    		sqlStatement := 'UPDATE ' || tablename || '_BLOB SET ' || sqlStatement || ' WHERE ' || 'PK_' || tablename || '_BLOB = ' || sequenceKey;
     
    		EXECUTE IMMEDIATE sqlStatement USING blobData;		
    	END updateBlob;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2008, 16h01
  2. [VB6] Problème mysql avec type données BLOB
    Par KrusK dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/06/2006, 11h13
  3. [MySQL] Probléme : Update d'un champ...
    Par bullrot dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 06/03/2006, 17h28
  4. problème update avec sous requetes
    Par stoz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 16h44
  5. Update d'un champ BLOB
    Par ZeKlubb dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 17/01/2004, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo