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 :

ORA-06502: PL/SQL : erreur num�rique ou erreur sur une valeur


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    D�cembre 2020
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 4
    Par d�faut ORA-06502: PL/SQL : erreur num�rique ou erreur sur une valeur
    Bonjour,
    Tout d�abord meilleurs v�ux.
    J�ai besoin de votre aide :
    J�ai une base de donn�es Oracle et j�essaye de mettre en place une proc�dure stock�e (utilisant 2 tables) qui consiste � exporter le r�sultat d�une requ�te SQL sous forme de plusieurs fichiers xml. Quand je l�ex�cute j�ai le message d�erreur :

    ORA-06502: PL/SQL : erreur num�rique ou erreur sur une valeur
    ORA-06512: � "WM.EXPORT_TO_XML", ligne 68
    ORA-06512: � ligne 2

    La ligne 2 : file_handle UTL_FILE.FILE_TYPE;
    La ligne 68 : UTL_FILE.PUT_LINE(file_handle, xml_result);


    Merci beaucoup pour votre aide.

    Cordialement.

  2. #2
    Mod�rateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par d�faut
    Bonjour,

    Les messages d'erreur, c'est bien, mais sans le script de la PS ni le script de cr�ation des tables...

  3. #3
    Membre Expert
    Homme Profil pro
    D�veloppeur Oracle
    Inscrit en
    D�cembre 2019
    Messages
    1 176
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur Oracle

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 1 176
    Par d�faut
    Bonjour,

    Il nous faudrait le code qui cause l'erreur.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    D�cembre 2020
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 4
    Par d�faut
    Rebonjour et merci pour votre message.

    le script de la PS est :

    Code SQL : 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    create or replace PROCEDURE EXPORT_TO_XML AS 
        file_handle UTL_FILE.FILE_TYPE;
        val_col1 HISTO_TRACA_INTERVENTION_E.ID_INTERVENTION%TYPE;
        val_col2 HISTO_TRACA_INTERVENTION_E.ID_IPP%TYPE;
        val_col3 HISTO_TRACA_INTERVENTION_E.ID_SEJOUR%TYPE;    
     
        xml_result CLOB;
    BEGIN
        FOR data IN (
            SELECT
                histo_traca_intervention_e.id_intervention,
                histo_traca_intervention_e.id_ipp,
                histo_traca_intervention_e.id_sejour,
                histo_traca_intervention_e.id_histo AS id_histo1,
                histo_traca_intervention_d.id_traca AS id_traca1,
                histo_traca_intervention_d.id_ref_tracee AS id_ref_tracee1,
                histo_traca_intervention_d.id_lot AS id_lot1,
                histo_traca_intervention_d.dluo AS dluo1
            FROM
                histo_traca_intervention_e
            INNER JOIN histo_traca_intervention_d ON histo_traca_intervention_e.id_intervention = histo_traca_intervention_d.id_intervention
            WHERE 
                histo_traca_intervention_d.ID_HISTO = histo_traca_intervention_e.ID_HISTO
                AND ID_IPP=lpad(ID_IPP,9,'0')
                and histo_traca_intervention_e.date_cloture >= TO_DATE('2022-12-15', 'YYYY-MM-DD')
                AND statut_historique <> 'INACTIF'
        ) LOOP
            val_col1 := data.ID_INTERVENTION;
            val_col2 := data.ID_IPP;
            val_col3 := data.ID_SEJOUR;
     
            SELECT XMLElement("Root",
                XMLAgg(
                    XMLElement("data",
                        XMLForest(
                            histo_traca_intervention_e.id_intervention AS "HISTO_TRACA_INTERVENTION_E.ID_INTERVENTION",
                            ID_IPP AS "HISTO_TRACA_INTERVENTION_E.ID_IPP",
                            ID_SEJOUR AS "HISTO_TRACA_INTERVENTION_E.ID_SEJOUR",
                            histo_traca_intervention_e.id_histo AS "id_histo1",
                            histo_traca_intervention_d.id_traca AS "id_traca1",
                            histo_traca_intervention_d.id_ref_tracee AS "id_ref_tracee1",
                            histo_traca_intervention_d.id_lot AS "id_lot1",
                            histo_traca_intervention_d.dluo AS "dluo1"
                        )
                    )
                )
            ).getClobVal()
            INTO xml_result
            FROM HISTO_TRACA_INTERVENTION_E,histo_traca_intervention_d
     
            WHERE 
     
                 HISTO_TRACA_INTERVENTION_E.ID_INTERVENTION = val_col1 
                AND HISTO_TRACA_INTERVENTION_E.ID_IPP = val_col2 
                AND HISTO_TRACA_INTERVENTION_E.ID_SEJOUR = val_col3;
     
            file_handle := UTL_FILE.FOPEN('IMPORT', val_col1 || '_' || val_col2 || '_' || val_col3 || '.xml', 'W');
            UTL_FILE.PUT_LINE(file_handle, xml_result);
            UTL_FILE.FCLOSE(file_handle);
        END LOOP;
    END EXPORT_TO_XML;

    ===> Messages d'erreur :

    ORA-06502: PL/SQL : erreur num�rique ou erreur sur une valeur
    ORA-06512: � "WM.EXPORT_TO_XML", ligne 58
    ORA-06512: � ligne 2


    Cordialement.

  5. #5
    Membre Expert
    Homme Profil pro
    D�veloppeur Oracle
    Inscrit en
    D�cembre 2019
    Messages
    1 176
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur Oracle

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 1 176
    Par d�faut
    La proc�dure UTL_FILE.PUT_LINE a un buffer max de 32767, donc si ton CLOB d�passe cette limite tu vas avoir une erreur. Il faudra que tu d�coupes en plusieurs morceaux le fichier pour les concat�ner.
    Voici un exemple
    https://oracle-base.com/articles/8i/export-clob

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    D�cembre 2020
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 4
    Par d�faut
    Merci beaucoup pour votre r�ponse rapide.

    J'ai suivi votre conseil et votre lien et j'ai essay� de d�couper en plusieurs morceaux puis de les concat�ner mais j'ai des difficult�s :

    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
    CREATE OR REPLACE PROCEDURE EXPORT_TO_XML_3 AS 
        file_handle UTL_FILE.FILE_TYPE;
        val_col1 HISTO_TRACA_INTERVENTION_E.ID_INTERVENTION%TYPE;
        val_col2 HISTO_TRACA_INTERVENTION_E.ID_IPP%TYPE;
        val_col3 HISTO_TRACA_INTERVENTION_E.ID_SEJOUR%TYPE;
     
        xml_result CLOB;
        chunk_size INTEGER := 30000; -- Taille de chaque segment à écrire dans le fichier
        offset INTEGER := 1;
    BEGIN
        FOR data IN (
       SELECT
                histo_traca_intervention_e.id_intervention,
                histo_traca_intervention_e.id_ipp,
                histo_traca_intervention_e.id_sejour,
                histo_traca_intervention_d.id_traca
            FROM
                histo_traca_intervention_e
            INNER JOIN histo_traca_intervention_d ON histo_traca_intervention_e.id_intervention = histo_traca_intervention_d.id_intervention
            WHERE 
                histo_traca_intervention_d.ID_HISTO = histo_traca_intervention_e.ID_HISTO
                AND ID_IPP = LPAD(ID_IPP, 9, '0')
                AND date_cloture >= TRUNC(SYSDATE - 1) 
                AND statut_historique <> 'INACTIF'
        ) LOOP
            val_col1 := data.ID_INTERVENTION;
            val_col2 := data.ID_IPP;
            val_col3 := data.ID_SEJOUR;
     
            xml_result := 'XML_CLOB';
     
            file_handle := UTL_FILE.FOPEN('IMPORT', val_col1 || '_' || val_col2 || '_' || val_col3 || '.xml', 'W');
     
            LOOP
                EXIT WHEN offset > DBMS_LOB.GETLENGTH(xml_result);
     
                -- Écriture du prochain segment dans le fichier
                UTL_FILE.PUT(file_handle, DBMS_LOB.SUBSTR(xml_result, chunk_size, offset));
                offset := offset + chunk_size;
            END LOOP;
     
            UTL_FILE.FCLOSE(file_handle);
        END LOOP;
    END EXPORT_TO_XML_3;
    Merci pour votre aide.

    Cordialement.

  7. #7
    Mod�rateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par d�faut
    La derni�re fois que j'ai pratiqu� du XML en PL/SQL c'�tait il y a plus d'une dizaine d'ann�es, mais j'�tais arriv� � la conclusion que tout mettre dans un CLOB et l'�crire en une fois �tait plus performant que de l'�crire bout par bout.
    Je concat�nais tout dans un CLOB :
    • DBMS_LOB.CREATETEMPORARY pour la cr�ation.
    • DBMS_LOB.WRITEAPPEND / DBMS_LOB.APPEND pour �crire dedans (le premier pour des varchar, le second pour un clob).
    • DBMS_XSLPROCESSOR.CLOB2FILE pour faire une seule �criture sur disque.
    • DBMS_LOB.FREETEMPORARY pour rester propre.

    Et vu qu'a priori votre requ�te retourne d�j� un clob complet, peut-�tre que seul le CLOB2FILE est utile pour vous.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    D�cembre 2020
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Assistant aux utilisateurs
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 4
    Par d�faut
    Bonsoir et merci beaucoup pour votre proposition, je vais regarder.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 16/10/2021, 17h11
  2. Requ�te en SQL (erreur sur une donn�e ..)
    Par Kmotus dans le forum Codes sources WinDev
    R�ponses: 3
    Dernier message: 04/03/2021, 12h23
  3. R�ponses: 5
    Dernier message: 24/04/2017, 14h57
  4. [SQL] Erreur sur une requ�te
    Par nani1 dans le forum PHP & Base de donn�es
    R�ponses: 2
    Dernier message: 08/04/2008, 17h29
  5. [SQL] Erreur sur une requ�te avec un Like
    Par heruwenli dans le forum PHP & Base de donn�es
    R�ponses: 1
    Dernier message: 30/05/2007, 14h29

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