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 :

Appel de fonction par SYS qui retourne une erreur


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut Appel de fonction par SYS qui retourne une erreur
    Bonsoir,
    Je suis nouveau en PL/SQL et utilise une fonction fournie par McMsur le forum suivant :http://www.developpez.net/forums/d25...nes-associees/
    dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE FUNCTION F_NUMROW(p_table IN VARCHAR2) RETURN NUMBER
    AS
    	v_retour NUMBER;
    BEGIN
    	EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || p_table INTO v_retour;
    	RETURN v_retour;
    END
    /
    Lorsque je lance la requète simple suivante l'utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT table_name, num_rows, F_NUMROW(table_name)
    FROM all_tables
    WHERE owner in ('SCOTT','HR')
    /
    Je reçois le message d'erreur et ne sait pas pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT table_name, num_rows, F_NUMROW(table_name)
                                 *
    ERROR at line 1:
    ORA-00942: table or view does not exist
    ORA-06512: at "SYS.F_NUMROW", line 5
    La création de la fonction s'est déroulée sans erreur via SYS.
    Merci pour votre aide.

  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
    Bonjour

    Comme vous le voyez, cette fonction F_NUMROW ne prend pas en compte la notion de schéma, donc la table qu'elle traite est recherchée dans le schéma du propriétaire de la fonction.
    Dans votre cas, les tables sont systématiquement recherchées sous SYS.

    Il faut donc que vous modifiiez cette fonction pour qu'elle accepte le nom de schéma en paramètre complémentaire.

    Et par ailleurs, il ne faut jamais créer d'objet dans le schéma SYS. SYS doit être réservé aux opérations d'administration qui ne peuvent pas être effectuées sous un autre compte.
    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
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut
    Merci Pomalaix pour votre réponse rapide.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    461
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 461
    Points : 283
    Points
    283
    Par défaut
    J'ai modifié mon code comme suit mais ça ne semble pas être correcte :
    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
    CREATE OR REPLACE FUNCTION F_NUMROW(p_owner IN VARCHAR2 , p_table IN VARCHAR2) RETURN NUMBER
    AS
    	v_retour NUMBER;
    BEGIN
    	EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || p_owner.p_table INTO v_retour;
    	RETURN v_retour;
    END;
    /
     
     
     
    SELECT table_name, num_rows, F_NUMROW(owner , table_name)
    FROM all_tables
    WHERE owner in ('SCOTT','HR')
    /
    La création de la fonction sort en erreur. J'ai tenté de lui passer deux paramètre mais ça ne doit pas être le bonne forme.

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

Discussions similaires

  1. Fonction qui retourne une collection
    Par superfly dans le forum Oracle
    Réponses: 9
    Dernier message: 25/06/2009, 18h02
  2. [MySQL] requete qui retourne une erreur a l'execution
    Par naazih dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/05/2008, 12h59
  3. Requete SQL qui retourne une erreur
    Par gregal dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/03/2008, 23h05
  4. Réponses: 23
    Dernier message: 13/11/2006, 03h33
  5. [debutant] fonction qui retourne une valeur
    Par arnolpourri dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/06/2006, 09h29

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