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

Oracle Discussion :

Gestion des excceptions


Sujet :

Oracle

  1. #21
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    non il est positionné à 9.0.0

  2. #22
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    alors essaye ma solution précédente avec le(s) tableau(x)
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  3. #23
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Je ne suis pas trop une pro des tableaux mais bon vu la situation ....

    Merci pour ton aide ...

  4. #24
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    voici un petit exemple tout simple :

    une table test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table test ( champ1 number, champ2 varchar2(50) ) ;
    et un petit code d'insertion avec un tableau :
    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
    Declare
     
        -- type du tableau 
        type testTabType is table of test%RowType ;
     
        -- tableau avec son initialisation 
        testTab     testTabType := testTabType (Null) ;
     
        -- No d'index des item du tableau 
        idx         number := 0 ;
     
    Begin
     
        -- pour commencer "propre", on vide le tableau pour commencer 
        testTab.delete ;
     
        -- chargement du tableau, 1ère ligne 
        idx := idx + 1 ; -- on incrémente l'index des item 
        testTab.extend ; -- on étend le tableau d'une ligne 
     
        testTab(idx).champ1 := 100 ;                -- valeur à donner à la colonne champ1 de la table test
        testTab(idx).champ2 := 'première ligne' ;   -- valeur à donner à la colonne champ1 de la table test 
     
        ---------------------------------------------------
     
        -- chargement du tableau, 2ème ligne 
        idx := idx + 1 ; -- on incrémente l'index des item 
        testTab.extend ; -- on étend le tableau d'une ligne 
     
        testTab(idx).champ1 := 200 ;                -- valeur à donner à la colonne champ1 de la table test
        testTab(idx).champ2 := 'deuxième ligne' ;   -- valeur à donner à la colonne champ1 de la table test 
     
        ---------------------------------------------------
     
        -- insertion (en une seule fois) du tableau dans la table test 
        forall j in testTab.first .. testTab.last
            insert into test values testTab(j) ;
     
        Commit ;
     
    End ;
    j'espère que ça va t'aider...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  5. #25
    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
    Si tu veux des exemples d'utilisations des tableaux :
    http://sheikyerbouti.developpez.com/...?page=Chap5#L5

    [EDIT] Désolé Yorglaa, quand j'ai posté, je n'ai pas vu ta réponse [/EDIT]
    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. #26
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Lorsque je compile , j'ai le programme s'arrete


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    forall j IN VP_Tabl.first .. VP_Tabl.last
        INSERT INTO T_ANOMAL VALUES  (VP_Tabl(j));
        COMMIT ;

    et génére le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PL/SQL: ORA-00947: Nombre de valeurs insuffisant

    Pourtant la déclaration effectuée me semble bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TYPE VP_TabType  IS TABLE OF T_ANOMAL%ROWTYPE ;
    VP_Tabl     VP_TabType;
    VP_idx         NUMBER   ;
    Que se passe t-il ?

  7. #27
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    salut,
    dans l'insert, le tableau ne doit pas être entre parenthèses...

    faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... VALUES  (VP_Tabl(j));
    juste :
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  8. #28
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Non en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... VALUES  VP_Tabl(j);
    Il n'en veut pas non plus !!!

  9. #29
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    alors essaye aussi d'initialiser le tableau dans sa déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VP_Tabl     VP_TabType := VP_TabType (null);
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  10. #30
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    en relisant ces posts, je me pose une question et j'ai un souvenir qui revient à moi...

    La question:
    Est-ce que tu as essayé de mettre les test de la base distante dans une procédure autonome indépendante ? (si tenté que ce soit tolérable fonctionnellement...)

    Le souvenir:
    J'ai des collègues qui avaient soufferts longtemps sur le même genre de problème sur un gros projet. Finalement, ils avaient mis en place une solution à base de tableaux. C'est à dire qu'il y avait une procédure "chapeau" qui était chargée d'appeler les autres procédures avec à chaque fois le passage d'un tableau en paramètre (out ou in/out). Chaque procédure dirigeait tous ses messages dans le tableau, puis la procédure chapeau inscrivait à la fin le contenu du tableau dans une table oracle de traces. Une fois ce principe mis en place, tout roule...

  11. #31
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Une autre chose me vient aussi à l'esprit :

    comme on initialise le tableau avec RowType, TOUTES les colonnes de la table T_ANOMAL sont présentes dans ce tableau...

    alors est-ce tu affecte bien une valeur (même Null si il le faut) pour CHAQUE colonne du tableau avant l'insert ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  12. #32
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    effectivement je n'initialise pas le tableau ... j'essayerai demain et vous tient au courant ....


    merci.

  13. #33
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    Lorsque je déclare mes variables publiques dans mon package

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TYPE VP_TabType  IS TABLE OF T_ANOMAL%ROWTYPE;
    VP_idx         NUMBER   ;
    VP_Tabl     VP_TabType := VP_TabType(NULL);
    J'ai le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PLS-00492: l'initialisation de variable ou de constante ne peut pas se référer à des fonctions déclarées dans le même package
    donc j'ai découpé ça en 2 étapes

    mes variables publiques dans mon package

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TYPE VP_TabType  IS TABLE OF T_ANOMAL%ROWTYPE;
    VP_idx         NUMBER   ;
    VP_Tabl     VP_TabType ;
    et dans ma procédure qui execute mon traitement des anomalies je déclare:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    VP_Tabl     VP_TabType := VP_TabType(NULL);
    Mais cela ne résoud pas mon problème j'ai toujours le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PL/SQL: ORA-00906: Parenthèse de gauche absente
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO  T_ANOMAL VALUES VP_Tabl(j);

  14. #34
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    à priori je dirais que le message d'erreur (parenthèses) laisse supposer qu'il manque une parenthèse AILLEURS dans le code (plus haut), ce qui décale les ouverture - fermetures de parenthèses et ne te met pas le message en relation avec la bonne ligne...

    essaye de commenter ton insert et de faire autre chose à la place (select sysdate into xxx from dual par exemple) pour voir si tu as toujours ce message pour une autre ligne de ton code...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  15. #35
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    J'ai fait le test que tu m'as proposé et en fait j'ai le message suivant .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PLS-00435: L'instruction DML sans BULK In-BIND ne peut pas être utilisée dans un FORALL
    alors j'ai mis en commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    forall i IN VP_Tabl.first..VP_Tabl.last
    et là je n'ai plus de probleme ?!! Je vais pété un plomb ...

  16. #36
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    sinon j'ai aussi essayé ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FORALL  i IN VP_Tabl.FIRST..VP_Tabl.LAST
    INSERT INTO T_ANOMAL(R_CODPAT, R_FICHIER, R_CHAMPS, R_CODE_REJET, R_NATURE_REJET, R_DATE_REJET) 
       								   VALUES(VP_Tabl(i).R_CODPAT,VP_Tabl(i).R_FICHIER, VP_Tabl(i).R_CHAMPS, VP_tabl(i).R_CODE_REJET, VP_Tabl(i).R_NATURE_REJET, VP_Tabl(i).R_DATE_REJET);
    et la j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PLS-00436: restriction de mise en oeuvre : impossible de référencer des champs d'une table d'enregistrements BULK In-BIND

  17. #37
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Est-ce que tu charge le tableau via un Bulk collect d'une curseur ?

    si oui, tu va devoir passer par une boucle standard (For Loop par exemple) pour le chargement du tableau...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  18. #38
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 92
    Points : 30
    Points
    30
    Par défaut
    non je ne passe pas par un Bulk collect

  19. #39
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    OK, alors essaye d'enregistrer le type et le tableau DANS la base...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create or replace type ...
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  20. #40
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    je te mets en plus un exemple d'une procédure de ma base, avec ce type de chargement...

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    Declare 
     
        Cursor cToLoad is 
        Select 
                SB.SupportBudget_i
                , SB.SupportBudgetID
                , GS.SocialGroup_i
                , SB.TotalAmount
                , SB.DateFrom
                , SB.DateTo
                , SB.DateMakeOut
                , SB.OrganizationalUnitPost_i
                , SB.T_SBRequesterCategory_i
                , SB.T_SupportBudgetInvalidation_i
                , SB.T_SupportBudgetPayment_i
                , SB.T_SupportBudgetStatus_i
                , SB.T_SBInputMode_i
                , SB.SupportBudgetComment
                , SB.TotalAlreadyPaidForSupport
                , SB.TotalAlreadyPaidForSupportInv
                , SB.TotalIncomeDeducted
                , SB.TotalIncomeDeductedInv
                , SB.TotalIncomeProvision
                , SB.TotalToPayForSupport
                , SB.TotalToPayForSupportInv
                , SB.TotalExtraIndemnity
                , SB.TotalExtraIndemnityInv
                , SB.TotalExtraDeduction
                , SB.TotalExtraDeductionInv
                , SB.TotalIncome
                , SB.TotalIncomeCalculated
                , SB.TotalReimbursement
        From      (
                    Select distinct
                            SG.SocialGroup_i
                    From    WVDSocialGroup SG
                    Where   SG.VDBillHeader_i = pn_Bill_I
                    And     SG.SocialGroup_i not in (
                                                        Select distinct
                                                                E.Object_i
                                                        From    WVDBillError E
                                                        Where   E.VDBillHeader_i = SG.VDBillHeader_i
                                                        And     E.ErrorNumber between 2000 and 2999 --Erreurs "Groupe Social"
                                                        And     E.ErrorNumber != 2001 -- mais pas la 2001 qui est contrôlée A LA FIN de cette procédure 
                                                        And     E.Validated = 'N'
                                                    ) 
                  )             GS
                , SupportBudget SB
        Where           GS.SocialGroup_i = SB.SocialGroup_i
                And     SB.DateFrom between rBillInfo.DateFrom and rBillInfo.DateTo 
                And     SB.T_SupportBudgetStatus_i = 2291 ; -- Payé 
     
        Type rTabType is table of WVDSupportBudget%RowType ;
     
        rTab                        rTabType := rTabType (Null) ;
        idx                         Number := 0 ;
        nSeq                        Number ;
     
    Begin
     
     
        rTab.Delete ;
     
        For i in cToLoad
        Loop
            idx := idx + 1 ;
            Select WVDSupportBudget_iSeq.NextVal into nSeq from dual ;
     
            rTab.extend ;
            rTab(idx).WVDSupportBudget_i := nSeq ;
            rTab(idx).VDBillHeader_i := pn_Bill_I ;
            rTab(idx).SupportBudget_i := i.SupportBudget_i ;
            rTab(idx).SupportBudgetID := i.SupportBudgetID ;
            rTab(idx).SocialGroup_i := i.SocialGroup_i ;
            rTab(idx).TotalAmount := i.TotalAmount ;
            rTab(idx).DateFrom := i.DateFrom ;
            rTab(idx).DateTo := i.DateTo ;
            rTab(idx).DateMakeOut := i.DateMakeOut ;
            rTab(idx).OrganizationalUnitPost_i := i.OrganizationalUnitPost_i ;
            rTab(idx).T_SBRequesterCategory_i := i.T_SBRequesterCategory_i ;
            rTab(idx).T_SupportBudgetInvalidation_i := i.T_SupportBudgetInvalidation_i ;
            rTab(idx).T_SupportBudgetPayment_i := i.T_SupportBudgetPayment_i ;
            rTab(idx).T_SupportBudgetStatus_i := i.T_SupportBudgetStatus_i ;
            rTab(idx).T_SBInputMode_i := i.T_SBInputMode_i ;
            rTab(idx).SupportBudgetComment := i.SupportBudgetComment ;
            rTab(idx).TotalAlreadyPaidForSupport := i.TotalAlreadyPaidForSupport ;
            rTab(idx).TotalAlreadyPaidForSupportInv := i.TotalAlreadyPaidForSupportInv ;
            rTab(idx).TotalIncomeDeducted := i.TotalIncomeDeducted ;
            rTab(idx).TotalIncomeDeductedInv := i.TotalIncomeDeductedInv ;
            rTab(idx).TotalIncomeProvision := i.TotalIncomeProvision ;
            rTab(idx).TotalToPayForSupport := i.TotalToPayForSupport ;
            rTab(idx).TotalToPayForSupportInv := i.TotalToPayForSupportInv ;
            rTab(idx).TotalExtraIndemnity := i.TotalExtraIndemnity ;
            rTab(idx).TotalExtraIndemnityInv := i.TotalExtraIndemnityInv ;
            rTab(idx).TotalExtraDeduction := i.TotalExtraDeduction ;
            rTab(idx).TotalExtraDeductionInv := i.TotalExtraDeductionInv ;
            rTab(idx).TotalIncome := i.TotalIncome ;
            rTab(idx).TotalIncomeCalculated := i.TotalIncomeCalculated ;
            rTab(idx).TotalReimbursement := i.TotalReimbursement ;
        End Loop ;
     
        If rTab.Exists(1)
        Then
     
            ForAll j in rTab.First .. rTab.Last
                Insert into WVDSupportBudget
                    Values rTab(j) ;
     
                Commit ;
     
        End If ;
     
    End ;
    ton erreur c'est à la compilation, ou à l'exécution ?
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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