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 :

Définition d'un type objet dans un package [12c]


Sujet :

PL/SQL Oracle

  1. #1
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut Définition d'un type objet dans un package
    Bonjour,

    J'aurais voulu définr un type objet avec ses méthodes (member function) à l'intérieur d'un package mais ma commande est refusée.
    Est-ce que ce type de déclaration est totalement invalide ou est-ce que j'ai fait une erreur quelque part ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create package MonPkg
    as
        type    MonObjet    is object
                    (   Chaine  varchar2(30)
                    ,   Nombre  number(2,0)
                    ,   member function Methode
                            return varchar2
                    );
    end;
    /
    Elément Package MONPKG compilé

    LINE/COL ERROR
    --------- -------------------------------------------------------------
    3/28 PLS-00103: Encountered the symbol "OBJECT" when expecting one of the following: ( array new range record varray char_base number_base decimal date_base clob_base blob_base bfile_base table ref fixed varying sparse The symbol "record was inserted before "OBJECT" to continue.
    6/37 PLS-00103: Encountered the symbol "METHODE" when expecting one of the following: := . ( ) , @ % not null range default external character
    Je n'ai pas poussé plus loin vers la définition du PACKAGE BODY puisque tout le reste dépend de ce TYPE.

    Je précise que ce type ne sera utilisé qu'à l'intérieur de ce package et j'aimerais éviter de l'exposer au niveau du schéma.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    A ma connaissance, les types objets doivent être déclarés en base par CREATE TYPE, on ne peut pas les définir purement en PL/SQL.

    J'ai trouvé un bout de doc qui le mentionne explicitement en 10g, mais je n'ai pas trouvé quelque chose d'aussi clair en 12c.
    https://docs.oracle.com/cd/B12037_01...objs.htm#i7504
    Currently, you cannot define object types in a PL/SQL block, subprogram, or package. You can define them interactively in SQL*Plus using the SQL statement CREATE TYPE.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Merci pour ta réponse rapide.
    Tu confirmes mes craintes... et les faiblesses de la documentation officielle.

    Tant pis, je me passerai d'objet et je continuerai à passer par référence des structures à des procédures ou des fonctions.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Vous créez les objets comme les tables, vues, séquences, etc. en dehors des packages PL. Pour les autres types cela ne semble pas vous gêner de les utiliser dans un package sans les déclarer dans le même package. Pourquoi vous trouvez donc cela gênant avec les types ?

    Je ne sais pourquoi vous trouvez la documentation "faible" mais je pense que beaucoup des malentendus arrivent parce que personne ne prend plus le temps de lire les Oracle Concepts.

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

Discussions similaires

  1. Définition d'un type dérivé dans un module
    Par Invité dans le forum Fortran
    Réponses: 3
    Dernier message: 13/01/2009, 11h02
  2. traitement d'un Champ de type objet dans le Decorator
    Par zanzan212 dans le forum Struts 1
    Réponses: 1
    Dernier message: 04/10/2007, 01h36
  3. Réponses: 3
    Dernier message: 16/10/2006, 11h06
  4. Réponses: 3
    Dernier message: 02/05/2006, 15h12
  5. Renvoyer un type structuré dans objet OLE
    Par Bleuarff dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/05/2005, 20h05

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