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 modification de curseur


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut Problème modification de curseur
    Bonjour,

    Afin de visualiser des informations sur un report lancé depuis un ERP, je souhaite rajouter dans un curseur un identifiant.
    En recherchant comment est structuré le rapport, je constate sur SQLDEVELOPPER qu'il y a appel à une procédure stockée nommée GETPRTTREEBOM qui se définie de la sorte

    Voici ce que j'ai comme code:
    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
    CREATE OR REPLACE
    PACKAGE BODY          "PKG_RPT_TREE_BOM" AS
     
      PROCEDURE GetRPTTreeBom(mID_TREE_BOM IN NUMBER, mCur OUT REFCUR)
      IS
     
      BEGIN
          OPEN mCur FOR SELECT * FROM Table(CAST(GetListRPTBom(mID_TREE_BOM) AS ART_RPT_INFO));
      END;
     
      FUNCTION GetListRPTBom(mID_TREE_BOM IN NUMBER) RETURN ART_RPT_INFO
      IS
        mRowArt     TOPERP.T_ARTICLE%ROWTYPE;
        mTypeFab    NUMBER;
        mBomTree    TOPPDM.BOM_TREE;
     
        mRowRPT     ROW_ART_RPT_INFO;
        ListRPT     ART_RPT_INFO := ART_RPT_INFO();
        ListRefMat  DBMS_SQL.VARCHAR2_TABLE;
        ListRefOut  DBMS_SQL.VARCHAR2_TABLE;
      BEGIN
     
          mBomTree := TOPPDM.PKG_TREE.GetListTreeBOM('ID_TREE_BOM = ' || mID_TREE_BOM );
     
          for i in mBomTree.FIRST .. mBomTree.LAST loop
            -- Ajout
            -- mRowRPT := ROW_ART_RPT_INFO(NULL,NULL,NULL,NULL,NULL,NULL);
            mRowRPT := ROW_ART_RPT_INFO(NULL,NULL,NULL,NULL,NULL,NULL,NULL);
     
            -- code propre au report
            mRowRPT.mLEVEL := LPAD(mBomTree(i).LEVEL_BOM,mBomTree(i).LEVEL_BOM+(mBomTree(i).LEVEL_BOM-1),' .');
            mRowRPT.ID_ARTICLE := mBomTree(i).ID_ERP_ITEM;
            mRowRPT.REFERENCE := mBomTree(i).ERP_REFERENCE;
            mRowRPT.DESIGNATION := mBomTree(i).ERP_DESIGNATION;
            mRowRPT.QTY := mBomTree(i).QUANTITY;
            -- Ajout
            mRowRPT.ID_ROUTING := mBomTree(i).ID_ROUTING;
     
            BEGIN
              select qte_disponible into mRowRPT.QTE_STOCK_DISPO from toperp.t_stock where id_article = mRowRPT.ID_ARTICLE;
            EXCEPTION WHEN OTHERS THEN
              mRowRPT.QTE_STOCK_DISPO := 0;
            END;
            -- fin du code
     
            ListRPT.extend;
            ListRPT(ListRPT.Last) := mRowRPT;
     
          end loop;
     
        return ListRPT;
     
      END;
    END;
    J'ai rajouté les lignes directement après le commentaire -- Ajout en vain.
    J'ai 2 messages d'erreur lors de la compilation :

    - PLS-00306 numéro ou types d'arguments erronés dans appel à ROW_ART_RPT_INFO (sur la ligne après le 1er ajout),

    - PLS-00302 le composant ID_ROUTING doit être déclaré (sur la ligne après le 2ème ajout).

    Je pense qu'il faut modifier le mRowRPT mais je ne sais comment faire via SQLDEVELOPPER.

    Merci d'avance.
    Julien.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    ROW_ART_RPT_INFO et ART_RPT_INFO sont des types SQL définis statiquement, il faut les modifier pour qu'ils connaissent les 2 nouvelles colonnes (sous sqldeveloper dans le dossier types)

    PS : évite les when others, when no_data_found (+ peut être when too_many_rows) semble suffisant

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    Merci bien pour la réponse.

    Je viens de trouver le dossier type sur SQLDEVELOPPER.

    Lorsque je rajoute le champ que je veux dans la définition de ROW_ART_RPT_INFO, j'ai un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-02303 : impossible de supprimer ou de remplacer un type dont dépendent des types ou des tables
    .

    En effet, ART_RPT_INFO est défini de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE OR REPLACE
    TYPE "ART_RPT_INFO"                                                                                   AS TABLE OF TOPPDM.ROW_ART_RPT_INFO;
    Existe t-il un moyen de "neutraliser" ce "pointeur" sans faire de drop ?

    Merci d'avance.
    Julien.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par juju05 Voir le message
    Existe t-il un moyen de "neutraliser" ce "pointeur" sans faire de drop ?
    Non, pas à ma connaissance du moins, il faut drop le type table, modifier le type object puis recréer le type table.

  5. #5
    Expert confirmé 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
    Par défaut
    Je pense que ça devrait être possible via alter type avec "dependent_handling_clause "

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 618
    Par défaut
    J'ai fait un drop du type table.

    Pour autant il me reste un niveau portant le même nom qui continue à pointer sur le row. La seule action que je puisse avoir dessus me semble t-il est "Edit package spec/body" via un clic-droit mais cela n'ouvre aucune fenêtre.

    Je ne sais pas comment faire pour le supprimer.

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

Discussions similaires

  1. PL/SQL, problème dans un curseur avec un insert
    Par yador dans le forum PL/SQL
    Réponses: 4
    Dernier message: 27/01/2006, 14h31
  2. modification du curseur d'un controle
    Par sofiane44 dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2006, 09h54
  3. Problème avec les curseurs SQL SERVER
    Par stefostillrise dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2005, 13h09
  4. Problème avec un Curseur...
    Par notfoune dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/10/2005, 07h55
  5. [débutant] problème avec le curseur (sablier)
    Par bat dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 01/12/2004, 08h26

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