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

SQL Oracle Discussion :

Synonyme pour 'table function' de package


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Synonyme pour 'table function' de package
    Bonjour,

    J'ai une 'table function' TF à l'intérieur d'un package PKG.
    En tant que user U, quand j'exécute la requête suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE(PKG.TF('arg'));
    tout va bien.

    Maintenant, en tant que U, je crée un synonyme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE SYNONYM TF FOR PKG.TF;
    COMMIT;
    et quand j'exécute la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE(TF('arg'))
    j'obtiens l'erreur :

    ORA-00904: "TF": invalid identifier
    Qu'est-ce qui ne ne va pas ? Précision : je suis sous Oracle 9.2.

  2. #2
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,
    Il me semble qu'un synonyme ne peut tout simplement pas référencer un objet à l'intérieur d'un package.
    Je penche, donc je suis

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu peux donc créer une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    create function tf(foo varchar2) return blabla is begin return pkg.tf(foo); end;
    /

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par laurentschneider
    tu peux donc créer une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    create function tf(foo varchar2) return blabla is begin return pkg.tf(foo); end;
    /
    L'interface de ma fonction dans le package étant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE PACKAGE PKG AS
    FUNCTION TF(foo  VARCHAR2) RETURN TF_TABLE_TYPE PIPELINED;
    END PKG;
    /
    si j'exécute l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE FUNCTION TF(foo  VARCHAR2) 
    RETURN TF_TABLE_TYPE PIPELINED
    IS 
    BEGIN RETURN PKG.TF(foo);
    END;
    j'obtiens l'erreur :

    PLS-00653: aggregate/table functions are not allowed in PL/SQL scope

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu peux toujours faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE or replace FUNCTION TF(foo  VARCHAR2) 
    RETURN TF_TABLE_TYPE pipelined 
    IS BEGIN 
      for c in (select * from table(pkg.tf(foo))) loop
        pipe row (c.column_value);
      end loop;
      return;
    END;
    /
    remplace column_value si nécessaire

Discussions similaires

  1. ALTER TABLE dans un package
    Par guntzerp dans le forum Oracle
    Réponses: 2
    Dernier message: 29/06/2006, 15h40
  2. Chemin relatif pour tables liées
    Par kiki_b dans le forum Access
    Réponses: 8
    Dernier message: 15/06/2006, 18h17
  3. alias ou synonymes pour les tables ou les champs ?
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2006, 11h04
  4. Réponses: 5
    Dernier message: 10/03/2006, 17h13
  5. definir chemin pour table liée
    Par branqueira dans le forum Access
    Réponses: 4
    Dernier message: 22/10/2005, 13h44

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