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 :

PACKAGE fantome suite génération script sql


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut PACKAGE fantome suite génération script sql
    Bonjour à tous !

    J'ai besoin de votre aide car je suis réellement largué.

    Environnement :
    ORACLE 12.1
    Windows server 2012

    J'ai un script sql de genération de package qui doit se déployer sur un schéma particulier (on va dire USR2).
    Celui-ci est exécuté via sqlplus.
    ex simplifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE PACKAGE PKG_X IS
    ...
     
    END PKG_X;
    /
    CREATE OR REPLACE PACKAGE BODY USR2.PKG_X  IS
     
    ...
     
     
    END USR2.PKG_X;
    /
    Le script fonctionne parfaitement, sauf lorsque, comme j'ai malheureusement fait, on se connecte sur le mauvais schéma (on va dire USR1)et que celui a des droits de créations sur le schéma USR2...

    Et là, c'est le drame...

    Si je me connecte sur USR2, le package est ... on pourrait dire présent, mais bien entendu en erreurs de compilation ; d'autant que les spécifications sont absentes...

    Si j'essaye de détruire le package, il me retourne
    ORA-04043 : objet PKG_X inexistant
    04043. 00000 - *object %s does not exist...
    .
    Normal, je ne l'ai pas créé ...

    Si j'essaye de détruire le package body, NO PROBLEM ; il a été créé !

    Par contre, si j'essaye de recréer le tout PROPREMENT, dans le bon schéma, AIEEE !!!

    En commençant par les spécifications bien-entendu.

    Rapport d'erreur -
    ORA-00955: ce nom d'objet existe déjà
    00955. 00000 - "name is already used by an existing object"
    *Cause:
    *Action:


    Conclusion :

    Le package existe mais pas vraiment...

    Donc si quelqu'un a l'âme d'un Ghostbuster, je suis preneur, car cette étourderie me met un bazar dans la base...

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Que retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT owner, object_type, status FROM dba_objects WHERE object_name = 'PKG_X';
    On est d'accord pour dire que l'erreur vient du code suivant : le package a été créé dans un schéma différent de USR2 (celui où tu étais connecté et où tu as lancé le script) et le body dans le schéma USR2?
    Si oui, je trouve étonnant qu'Oracle accepte que tu crées un package et son body dans deux schémas différents puisque les deux sont intimement liés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE PACKAGE PKG_X IS
    ...
     
    END PKG_X;
    /
    CREATE OR REPLACE PACKAGE BODY USR2.PKG_X  IS
     
    ...
     
     
    END USR2.PKG_X;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut
    En tout premier lieu, merci de ta rapidité.

    Pour ce qui est du résultat de la requête

    OWNER = USR2

    OBJECT_TYPE = PACKAGE BODY

    STATUS = INVALID


    Je suis bien d'accord avec toi, pourquoi Oracle m'a-t-il laisser créer un body sans sa spécification ? Je ne comprend pas ?

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Oui, Oracle autorise la création d'un package body sans Spec.

    Il suffit de supprimer le package body.

    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
    SQL> CREATE PACKAGE BODY WMC AS
      2  PROCEDURE A IS BEGIN NULL; END;
      3  END;
      4  /
     
    Warning: Package Body created with compilation errors.
     
    SQL> SELECT object_name, object_type, created, status FROM dba_objects WHERE object_name = 'WMC';
     
    OBJECT_NAME  OBJECT_TYPE         CREATED   STATUS
    ------------------- --------- -------
    WMC              PACKAGE BODY        06-JUL-18 INVALID
     
    SQL> drop package body WMC;
     
    Package body dropped.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut
    Bonjour à tous et surtout merci à tous ceux qui se sont penchés sur mon problème.
    La résolution du problème est celle indiquée par McM.

    DROP PACKAGE BODY PKG_X

    Je viens de retenter l'instruction par simple acquis de conscience, puis recréé proprement le package complet et cela a fonctionné parfaitement.
    Il y a 3 jours, pourquoi avais-je l'erreur :
    Rapport d'erreur -
    ORA-00955: ce nom d'objet existe déjà
    00955. 00000 - "name is already used by an existing object"


    Mystère ??? Peut-être y-a-t-il un mécanisme de nettoyage dans Oracle ?

    Donc, si vous rencontrez le même problème, insistez et patientez !

    Encore merci et bonne semaine à tous.

  6. #6
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par beretb Voir le message
    Mystère ??? Peut-être y-a-t-il un mécanisme de nettoyage dans Oracle ?
    Donc, si vous rencontrez le même problème, insistez et patientez !
    Il n'y a pas de mécanisme asynchone. Peut-être un bug? Dans ce cas, j'aurais tenté un 'alter system flush shared_pool' (vu que ce n'est pas une prod).
    Cordialement,
    Franck.

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

Discussions similaires

  1. Génération script SQL
    Par erox44 dans le forum Shell et commandes GNU
    Réponses: 34
    Dernier message: 12/07/2013, 10h30
  2. génération script sql
    Par zoheir13 dans le forum Firebird
    Réponses: 2
    Dernier message: 26/12/2010, 10h41
  3. Power AMC, génération script SQL
    Par davasm dans le forum PowerAMC
    Réponses: 1
    Dernier message: 24/05/2006, 16h18
  4. [PAMC]génération d'un mcd à partir d'un script sql
    Par jounaidi dans le forum Sybase
    Réponses: 2
    Dernier message: 27/03/2006, 17h43
  5. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57

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