Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2012, 15h32   #1
Membre habitué
 
Inscription : novembre 2008
Messages : 238
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 238
Points : 120
Points : 120
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 :
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.
juju05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 21h27   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
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
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h51   #3
Membre habitué
 
Inscription : novembre 2008
Messages : 238
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 238
Points : 120
Points : 120
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 :
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 :
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.
juju05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 20h47   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
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.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 11h41   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 313
Points : 5 817
Points : 5 817
Je pense que ça devrait être possible via alter type avec "dependent_handling_clause "
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/01/2012, 11h46   #6
Membre habitué
 
Inscription : novembre 2008
Messages : 238
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 238
Points : 120
Points : 120
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.
juju05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h13.


 
 
 
 
Partenaires

Hébergement Web