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 :

PL SQL Appel d’une function par une autre


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut PL SQL Appel d’une function par une autre
    Salut à tous,

    J’ai une fonction stockée (table_check) dans la base de donnée qui contrôle toutes les tables d’un autre Schéma et stocke les résultats dans une table de contrôle (sum_insert, sum_update, sum_delete, sum_duplicat, etc…).

    J’avais écris tous ceci dans un code. Mon chef veut maintenant pour chaque partie une fonction précise qui sera appelle et retournera le résultat correspondant pour chaque table.

    Ci-joint la fonction mère

    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
    33
    34
    35
    36
    37
    38
    39
    40
    create or replace
    FUNCTION F_table_check(p_source_id Tablecontrol.sd_id%TYPE)
    RETURN NUMBER IS
     
    --++++++++mes declarations
     
    --+++++++ Ouverture du cuseur
     
    BEGIN
    -- 1++++++++ Insertion des données primaires (issues des autres tables) dans la table de controle
    /*delete from  ttest;
     
    commit;
     
    --2+++++++ Ouverture d’un cuseur pour lire les données inserées dans la table de contrôle
     
    Loop
    -- 3++lecture des sum_insert de toutes les table ;
    -- 4++lecture des sum_update de toutes les table ;
    -- 5++ sum_delete de toutes les table ;
    -- 6++sum_duplicat de toutes les table ;
    End loop
    Fermeture du cuseur
     
    update table_check set 
          sum_insert = c_val_ins, 
          sum_update = c_val_upd,
          sum_delete = c_val_del, 
          sum_duplicat = c_val_dub
      where Tablecontrol.sd_id = p_sd_id;       
     
    commit;
    end loop;
    close l_cur;
     
    END LOOP;
     
    commit;
     
    END;
    Voici le code qui lit les insertions de chaque table (where t_Flg = 'I' et fait un group by avec le nom de la table et le source_id)
    --+++++++ Comment transformer ce bout de code en fonction pour qu'il me retourne toujours le nombre insertion par table et l’appeler dans la fonction mère


    Merci de votre aide.

    J’ai fouillé dans le net et je n’ai pas trouver d’exemple d’appel d’une fonction par une autre en PL SQL


    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
    open l_cur for stmt_str using 'I';
    loop
    fetch l_cur into c_val_ins;
     exit when l_cur%notfound;
     
    update table_check set 
          sum_insert = c_val_ins
     where Tablecontrol.sd_id = p_sd_id;       
    commit;
    end loop;
    close l_cur;
     
    END LOOP;
     
    commit;
     
    END;
    Merci
    fiona

  2. #2
    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
    Un appel de fonction en plsql se fait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable := ma_fonction(parametre1, parametre2, etc..);
    avec variable qui reçoit le retour de la fonction.

  3. #3
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salaut MCM,

    Merci pour ta reponse rapide. J'ai éssayé ce que tu m'as dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c_val_ins := F_nbre_Ins(p_sd_id);
    J' obtient la faute suivante:

    PLS-00201: identifier F_nbre_Ins' must be declared

    Est ce que je dois declarer la sous-fontion dans la fontion mére? si oui comment?

    Merci
    Fiona

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    D'après ce que j'ai compris, ta fonction F_nbre_Ins ne se trouve pas dans le même schéma que la fonction appelante. Si c'est le cas, je pense que le problème vient de là. Il faut faire 2 choses :
    • granter en exécution cette fonction pour le schéma de la fonction appelante


    • et soit créer un synonyme de la fonction F_nbre_Ins dans le schéma de la fonction appelante, soit faire précéder le nom de cette fonction par le nom du schéma propriétaire lors de son appel (notation pointée)

  5. #5
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Citation Envoyé par dgi77 Voir le message
    D'après ce que j'ai compris, ta fonction F_nbre_Ins ne se trouve pas dans le même schéma que la fonction appelante. Si c'est le cas, je pense que le problème vient de là. Il faut faire 2 choses :
    • granter en exécution cette fonction pour le schéma de la fonction appelante


    • et soit créer un synonyme de la fonction F_nbre_Ins dans le schéma de la fonction appelante, soit faire précéder le nom de cette fonction par le nom du schéma propriétaire lors de son appel (notation pointée)
    Salut Dgi,

    merci pour ta reponse.
    La onction F_nbre_Ins se trouve dans le même schéma que la fonction appelante. Je ne comprend pas pourquoi j'obtient cette faute.

    Fiona

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Dans ce cas, je ne vois pas. Il faut que tu nous envoies tes 2 fonctions pour qu'on puisse t'aider. Par exemple, est-ce que tu n'as pas fait de faute de frappe dans l'appel de la fonction ? Comme on n'a pas la fonction appelée, on ne peut pas le vérifier...

    La remarque de macben est à prendre en compte également, même si compte-tenu du message d'erreur, il doit y avoir un autre problème.

  7. #7
    Membre éclairé Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Par défaut
    Moi j'ai l'impression que ta fonction ne comprte pas de

    Si ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  2. SQL Remplacement d'une lettre par une autre
    Par nathieb dans le forum SQL
    Réponses: 2
    Dernier message: 19/09/2007, 11h01
  3. Réponses: 3
    Dernier message: 30/03/2007, 10h38
  4. Réponses: 11
    Dernier message: 05/10/2006, 13h20
  5. Réponses: 1
    Dernier message: 22/12/2005, 17h28

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