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 :

Fonction avec jointure ?


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Par défaut Fonction avec jointure ?
    Bonjour,

    J'ai créée une fonction qui doit me renvoyer un taux...
    Pour plus de facilite la voici :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    create or replace
    FUNCTION CalcTxPLoc (mag IN VARCHAR2, per IN VARCHAR2)
       RETURN NUMBER IS taux_porteurs_loc NUMBER;
       nb_p NUMBER;
       nb_ploc NUMBER;
       req VARCHAR2(1000);
       req2 VARCHAR2(1000);
     BEGIN
     
    	req := 'SELECT sum(a.pa_nb) '||
    	'FROM grfid_h_200607 a , arcsde.gr_taxcodes_2001 b '||
    	'WHERE a.codmag = '''||mag||''' '||
    	'AND   a.periode = '''||per||''' '||
      'AND   a.codgeo = b.ID '||
    	'AND   a.codgeo NOT IN (''NP'',''PNL'',''GNE'',''XXXX'') '||
    	'AND   a.pa_nb > 0 '
    	;
     
    EXECUTE IMMEDIATE req INTO nb_ploc;
     
    req2 :=	'SELECT sum(pa_nb) '||
    	'FROM grfid_h_200607 '||
    	'WHERE codmag =  '''||mag||''' '||
    	'AND   periode = '''||per||''''
      ;
     
    EXECUTE IMMEDIATE req2 INTO nb_p;
    	taux_porteurs_loc := nb_ploc/nb_p;
     
    	RETURN(taux_porteurs_loc);
     
     END;
    Cependant elle ne fonctionne pas ( étonnant xD ).
    Ca me renvoie une erreur de table qui n'existe pas au niveau de req. Or cette table existe bel et bien.
    Si j'execute la requete a part elle fonctionne bien d'ou mon incomprehension.

    Merci de m'aider

  2. #2
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Bonjour,

    Je pense que c'est un problème de droit d'accès à la table.
    Si la table n'appartient pas au user qui crée la fonction, il doit avoir directement les droits d'accès à cette table pour pouvoir l'utiliser dans du PL/SQL.
    Tant que tu ne fais que du pur SQL (des requêtes), tu peux hériter des droits via ton rôle, ça fonctionne.
    Par contre, pour faire du PL/SQL il faut avoir les droits directement au niveau du user.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Par défaut
    Merci de ta réponse.

    Tu as raison, j'ai effectué un grant sur mon user et ça fonctionne.
    Merci encore

  4. #4
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    De rien

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. création de vue avec jointures et fonctions mathématiques
    Par lepeule dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/06/2011, 11h17
  3. Réponses: 3
    Dernier message: 05/09/2006, 00h47
  4. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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