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

SQL Oracle Discussion :

Erreur ORA-01704 sql developer [Fait]


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Erreur ORA-01704 sql developer
    Bonjour à tous,

    Je suis nouveau sur ce forum, et j'espère avoir posté dans la bonne catégorie.

    J'ai un problème avec une requête sql que j'exécute par sql developer 1.0.0.13.43, il s'agit d'un update faisant donc plus de 4000 caractères sur un champ dans un table en LONG.

    J'ai pas mal cherché, et j'ai trouvé quelques scripts qui permettent de scinder le texte en plusieurs variables bind, ou en changeant en CLOB la table (j'ai pas trop compris ce point sur CLOB).

    Je suis assez débutant, et je ne comprends pas grand chose.

    Le truc qui me bloque, c'est que je ne sais pas executer les scripts du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
    for i in 1..100 -- or a select statement
    execute immediate
    'insert into bla (a, b, c) values (:x, :y, :z)'
    using a_variable, another_variable, yet_another;
    end loop;
    end;
    Si quelqu'un pouvait brièvement m'aider sur la façon de faire et d'exécuter un tel script, ou m'envoyer sur une aide ou un tuto ce serait super

    Merci d'avance,
    Jérémie

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Bonjour et bienvenu à toi

    Peux-tu nous mettre le code qui provoque cette erreur ?

    Pour ce qui est d'un tuto sur execute immediate, il y a celui-ci :
    http://sheikyerbouti.developpez.com/execute_immediate/
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse.

    Tu vas rire, mais je fais un update tout simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update description set description='Texte de plus de 4000 caractères avec des sauts de ligne' where descriptionid='3843186';
    J'avais bien vu le lien que tu m'as indiqué, mais je ne comprends pas comment utiliser le mode SQL natif. Je ne dispose que de SQL developer pour l'instant.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    En fait, je me rends compte que je n'y connais vraiment rien.
    Pour executer un script, il me faut sql*plus (si oui, je pense avoir les sources avec le client oracle) ?
    Je ne suis pas sorti de l'auberge
    @+

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Une chaîne de caractères ne peut pas dépasser 4000 caractères.

    Pour faire ce que tu veux faire il faut utiliser le package dbms_lob, et plus particulièrement la fonction dbms_lob.append :
    http://sheikyerbouti.developpez.com/...e=Chap9#L9.2.1
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Bonsoir plaineR,

    Merci pour les infos.
    Je me suis pas mal creusé la tête, et j'ai pas mal cherché, mais je suis encore bloqué.

    J'utilise maintenant sql*plus, j'ai donc compris comment exécuter un script.

    Le problème est que je ne sais pas l'écrire ce script maintenant

    Peux tu m'aider à adapter le script source que tu m'as indiqué à la requête que je veux faire à la base (en gros, je ne sais pas trop quoi mettre où )?

    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
    DECLARE
      dest_lob BLOB;
      src_lob BLOB;
    BEGIN
      -- Initialisation des variables LOB --
      SELECT b_lob INTO dest_lob
      FROM lob_table
      WHERE key_value = 12 FOR UPDATE;
     
      SELECT b_lob INTO src_lob
      FROM lob_table
      WHERE key_value = 21;
     
      -- Ajout de src_lob en fin de dest_lob --
      DBMS_LOB.APPEND(dest_lob, src_lob);
      COMMIT;
     
    END;
    Donc je remmet la commande que je veux exécuter à la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update description set description='Texte de plus de 4000 caractères avec des sauts de ligne' where descriptionid='3843186';
    Merci d'avance pour l'aide.
    Jérémie

  7. #7
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Bonjour,

    Peux-tu apporter plus de précisions à ton besoin, car il n'est pas clair(du moins pour moi).

    LBO72.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Biensur, je vais re-expliquer comme je peux

    J'ai accès à une base Oracle. Je me connecte avec sql developer, et j'ai des droits pour insérer et supprimer des données.

    Je veux faire un UPDATE d'un enregistrement dans la table description. Le champ description, que je veux update est du type LONG, et je veux UPDATE du texte à l'intérieur.

    Le texte que je veux UPDATE fait plus de 4000 caractères, et contient des sauts de ligne.

    Dans sql developer, j'ai deux façon d'update le texte :

    1) Je peux écrire ma requête sql du type UPDATE description SET description='texte de plus de 4000 caractères avec des sauts de lignes' WHERE descriptionid='564984';
    Quand je lance la requête dans sql developer, j'ai une jolie erreur ORA-01704. Je ne peux pas donc entrer tout mon texte dans la table.


    2) Dans sql developer, je peux aller directement dans la table, appliquer un filtre, et accéder à mon enregistrement.
    De là, j'ai la possibilité d'éditer directement le texte de l'enregistrement par un petit éditeur de texte de sql developer sans avoir à construire de requête.
    Quand je procède de cette manière, j'arrive à insérer plus de 4000 caractères, mais les sauts de ligne ne passent pas, le texte devient donc illisible.

    Je me suis renseigné un peu sur les forums, n'y connaissant pas grand chose, et j'ai appris qu'il y avait peut être une solution à mon problème en faisant un petit script. J'en suis là

    Merci pour toute aide apportée,
    Jérémie

  9. #9
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Ton pb a bien été exposé cette fois-ci. J'ai fait le test et j'ai eu le même souci. Portant, la doc oracle, dit qu'on peut stocker jusqu'à 2go sur un type LONG ???

    Je continue de creuser et te tiens au courant.
    LBO72.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    @ LBO72 : En effet, le type long permet d'avoir un champ contenant plus de 4000 caractère, je pense que dans mon cas, il s'agit d'une restriction du logiciel.

    @ plaineR : Si je comprends bien, le script d'exemple dans le lien que tu m'as indiqué pourrait me permettre d'ajouter le texte en plusieurs fois dans mon champ qui est en LONG ?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Ohh, grand maître guru des oracliens !

    Donne moi la force pour résoudre mon problème !

    /pray /pray /pray /pray

  12. #12
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Eh bien je crois savoir ce que tu cherches... du moins je l'espére

    Pour pouvoir insérer des lignes au delàs de 4000c dans ta table sous SqlPlus, il faut que tu agis sur le paramètre MaxData(Sous sqlPlus, tu vas sur Options\maxdata) et tu le passes à 8000c par exemple.
    J'ai fais le test ci-dessous :
    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
    40
    41
    42
    43
    44
    z7057hp/PAVSD10/PAVSD10)>desc lbo
     Name                    Null?    Type
    ----------------------- -------- -----
    XX                               LONG
    
    z7057hp/PAVSD10/PAVSD10)>insert into lbo values('1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      2  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      3  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      4  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      5  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      6  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      7  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      8  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
      9  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     10  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     11  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     12  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     13  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     14  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     15  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     16  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     17  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     18  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     19  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     20  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     21  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     22  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     23  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     24  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     25  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     26  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     27  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     28  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     29  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     30  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     31  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     32  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     33  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     34  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     35  1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
     36  12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789');
    
    1 row created.
    Il n'est pas conseillé d'utiliser le type LONG, il vaut mieux utiliser le CLOB.

    LBO72.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Salut LOB72,

    Ça a l'air bien ton analyse, mais je ne pense pas que ta requête d'exemple fasse plus de 4000 caractères, si ?

    Sinon, le texte à insérer contient des caractères spéciaux comme ' ou #, et j'ai peur que ça pose un problème.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Je ne trouve pas de solution à mon problème.

    Je précise qu'il ne m'est pas possible de modifier le type du champ que je veux update car il s'agit d'une base de prod (je me suis installé une base local pour faire des tests).

    Ma question change donc :

    Est il possible d'insérer du text faisant plus de 4000 caractères dans une colonne tout en concervant les sauts de lignes et les caractères spéciaux ?

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Bon, je mets à jour mon post car j'ai en partie réussi à résoudre mon problème.

    J'ai installé la vérision freeware de toad, et j'ai réussi à éditer directement mon enregistrement avec l'editeur de text TOAD qui lui insert bien plus de 4000 caractères avec les sauts de ligne avec les caractères spéciaux.

    Seulement voilà, c'est un freeware, et il n'est pas question d'acheter une licence.

    Donc me voilà encore presque coincé.

    Si quelqu'un connait une autre solution gratuite, ça serait super

    Je rappel que je dois utiliser le type LONG.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Réponse :
    Bonne année à tous !

    J'ai finalement la réponse à ma question ! Voici le script à utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE
    newtext LONG;
    BEGIN
    newtext := 'Voilà le texte à insérer.
    On peut mettre plusieur lignes bien sur.';
    UPDATE nom_table SET nom_champ=newtext WHERE nom_champ='valeur';
    END;
    /
    Voilà, j'espère que ça profitera à d'autres personnes !

    Bye

  17. #17
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Est-ce que tu mettre plus de 4000c dans ta variable newtext par sûr du tout.

    LBO72.

  18. #18
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    vu que c'était son problème et qu'il est marqué résolu on peut légitimement penser que c'est bien le cas

  19. #19
    Candidat au Club
    Homme Profil pro
    TELECOM
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : TELECOM

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Bonjour,
    Citation Envoyé par orafrance Voir le message
    vu que c'était son problème et qu'il est marqué résolu on peut légitimement penser que c'est bien le cas

  20. #20
    Candidat au Club
    Homme Profil pro
    TELECOM
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : TELECOM

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Je me permets d'entrer dans la discussion, pour vous informer que je viens de faire le test mais malheureusement ca ne marche pas.
    il ya toujours l'erreur ORA-01704

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

Discussions similaires

  1. Erreur import data SQL Developer
    Par Tigris dans le forum Import/Export
    Réponses: 0
    Dernier message: 05/04/2013, 17h05
  2. Data pump erreur ORA-39001 via SQL developer
    Par shinchan dans le forum Import/Export
    Réponses: 1
    Dernier message: 31/10/2012, 20h15
  3. Erreur ORA-21000 en PL/SQL pour un trigger
    Par keuhlu dans le forum PL/SQL
    Réponses: 3
    Dernier message: 12/03/2006, 08h47
  4. [Sql*Loader] Erreur ORA-00054
    Par Spyco dans le forum Oracle
    Réponses: 4
    Dernier message: 23/12/2005, 16h43
  5. Erreur ORA-01704 : constante de chaine trop longue
    Par verrec_s dans le forum Oracle
    Réponses: 22
    Dernier message: 13/12/2004, 15h30

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