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 :

Création d'un fichier .txt à partir d'une requête SQL - ORA-00932


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Création d'un fichier .txt à partir d'une requête SQL - ORA-00932
    Bonjour!

    Je dois créer des fichiers séquentiels de longueur fixe afin de faire une conversion de données.

    J'utilise rpad() pour ajouter les espaces blancs nécessaires à la fin de mes champs texte.

    Malheureusement, pour cette table il semble qu'il y ait des champs de type Long et quand j'essaie de faire un rpad, je me bute à l'erreur ORA-00932.

    Des suggestions pour régler ce petit problème ?
    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
    set term off;
    set heading off;
    set pagesize 0;
    set colsep '';
    set space 0;
    set trimout on;
    set trimspool off;
    set tab off;
    set feedback off;
     
    set linesize 6106;
    spool monfichier.txt;
     
     SELECT
       rpad(s_evt_act_x.row_id,15),
       nvl(to_char(s_evt_act_x.created,'yyyymmdd'),'        '),
       rpad(s_evt_act_x.created_by,15),
       nvl(to_char(s_evt_act_x.last_upd,'yyyymmdd'),'        '),
       rpad(s_evt_act_x.last_upd_by,15),
       rpad(s_evt_act_x.par_row_id,15),
       rpad(s_evt_act_x.attrib_04,30),
       rpad(s_evt_act_x.x_action_prise,2000),
       rpad(s_evt_act_x.x_description,4000)
     FROM
       s_evt_act_x
     ORDER BY 
       s_evt_act_x.row_id;
     
    spool off;
    Val
    ;-)

  2. #2
    Membre habitué Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Points : 196
    Points
    196
    Par défaut
    Pourrais-tu isoler la colonne qui pose problème et regarder sa description ?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Loyd1974 Voir le message
    Pourrais-tu isoler la colonne qui pose problème et regarder sa description ?
    C'est celle-ci :
    s_evt_act_x.x_action_prise

    Et sa description est :
    s_evt_act_x.x_action_prise
    Type : Long
    Null ? Yes

    Merci,
    Val
    ;-)

  4. #4
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249
    Par défaut
    Manipuler LONG champs est toujours la paine.
    Peut-être(???):

    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
     
    create table s_evt_act_y (
      ....,
      x_action_prise_lob clob);
    insert into s_evt_act_y (...., x_action_prise_lob)
      select ...., to_lob (x_action_prise)
        from s_evt_act_x;
     
    SELECT
       ...
       rpad(s_evt_act_y.x_action_prise_lob,2000),
       ...
     FROM
       s_evt_act_y
       ...

    DAB

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par DAB.cz Voir le message
    Manipuler LONG champs est toujours la paine.
    Peut-être(???):

    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
     
    create table s_evt_act_y (
      ....,
      x_action_prise_lob clob);
    insert into s_evt_act_y (...., x_action_prise_lob)
      select ...., to_lob (x_action_prise)
        from s_evt_act_x;
     
    SELECT
       ...
       rpad(s_evt_act_y.x_action_prise_lob,2000),
       ...
     FROM
       s_evt_act_y
       ...

    DAB

    Je n'ai malheureusement pas les droits pour créer une table. En entreprise, on fait pas toujours ce qu'on veut

    D'autres idées ?

    Merci,
    Val
    ;-)

  6. #6
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Fais des tests avec WHERE rownum < un_nombre jusqu'à ce qu'il n'y ait plus d'erreur afin de trouver la ligne de la table générant cette erreur.

    En effet quelque fois ce n'est pas le type de départ qui est en cause mais sa conversion. L'erreur de conversion ne remontant que lorsque la conversion sur cette ligne est demandée.

    Par exemple si on fait une conversion d'une chaine en date, tant qu'on ne lira pas la date erronée (par exemple mois=13) alors l'erreur ne remontera pas. Et lorsqu'on lance la requête sans borne ça plante et on ne comprends pas pourquoi.

    Essayes aussi de lancer ta requête avec une seule colonne à chaque fois. Ton champ rowid je ne le sens pas pour une conversion mais je n'ai pas oracle sous la main.

  7. #7
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par phili_b Voir le message
    Fais des tests avec WHERE rownum < un_nombre jusqu'à ce qu'il n'y ait plus d'erreur afin de trouver la ligne de la table générant cette erreur.
    Au cet cas, l'erreur est remontée toujours. La conversion LONG - VARCHAR dans select est interdite, je pense.

    Est-ce que tu peux formater le résultat en PL/SQL?
    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
     
    set serveroutput on size 1000000
     
    declare
      cursor c is
        select ..., x_action_prise
          from s_evt_act_x;
      v varchar2 (4000);
    begin
      for r in c loop
        ...
        v := rpad (r.x_action_prise, 2000);
        dbms_output.put_line (v);
      end loop;
    end;
    /
    Mais le LONG ne doit pas plus grand que 4000, autrement on va obtenir ORA-06502.

    DAB

  8. #8
    Membre actif Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par DAB.cz Voir le message
    Mais le LONG ne doit pas plus grand que 4000, autrement on va obtenir ORA-06502.
    Pardon, 32K

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par phili_b Voir le message
    Fais des tests avec WHERE rownum < un_nombre jusqu'à ce qu'il n'y ait plus d'erreur afin de trouver la ligne de la table générant cette erreur.

    En effet quelque fois ce n'est pas le type de départ qui est en cause mais sa conversion. L'erreur de conversion ne remontant que lorsque la conversion sur cette ligne est demandée.

    Par exemple si on fait une conversion d'une chaine en date, tant qu'on ne lira pas la date erronée (par exemple mois=13) alors l'erreur ne remontera pas. Et lorsqu'on lance la requête sans borne ça plante et on ne comprends pas pourquoi.

    Essayes aussi de lancer ta requête avec une seule colonne à chaque fois. Ton champ rowid je ne le sens pas pour une conversion mais je n'ai pas oracle sous la main.
    J'ai déjà essayé ceci, et c'est bel et bien le champ x_description qui cause problème, parce que c'est un long.
    Val
    ;-)

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par DAB.cz Voir le message
    Au cet cas, l'erreur est remontée toujours. La conversion LONG - VARCHAR dans select est interdite, je pense.

    Est-ce que tu peux formater le résultat en PL/SQL?
    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
     
    set serveroutput on size 1000000
     
    declare
      cursor c is
        select ..., x_action_prise
          from s_evt_act_x;
      v varchar2 (4000);
    begin
      for r in c loop
        ...
        v := rpad (r.x_action_prise, 2000);
        dbms_output.put_line (v);
      end loop;
    end;
    /
    Mais le LONG ne doit pas plus grand que 4000, autrement on va obtenir ORA-06502.

    DAB
    Je vais tenter le coup en PL/SQL et je vous en reparle.

    Merci
    Val
    ;-)

  11. #11
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par valclic Voir le message
    J'ai déjà essayé ceci, et c'est bel et bien le champ x_description qui cause problème, parce que c'est un long.
    ce que voulait dire phili_b c'est que peut être sur toute ta table, il n'y a qu'une seule ligne qui fait planter ta requete et pas toute la colonne...
    Pour le savoir esssaie de rajouter une clause sur le rownum...

    Si ce n'est pas le cas alors c'est que ton RPAD est impossible à la base sur un long en SQL, ça vaut le coup de tenter en PL mais j'y crois peu.
    A mon avis, cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v := rpad (r.x_action_prise, 2000);
    va planter
    Dyvim

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/03/2015, 11h57
  2. [AC-2010] Creer un fichier excel à partir d'une requête sql
    Par NassCorp dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/08/2013, 17h02
  3. [WD18] Ecrire dans un fichier txt à partir d'une requête SQL
    Par Blooster dans le forum WinDev
    Réponses: 4
    Dernier message: 29/05/2013, 11h03
  4. Réponses: 3
    Dernier message: 23/09/2009, 21h19
  5. Réponses: 8
    Dernier message: 07/09/2006, 11h43

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