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éclarations & Source


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué Avatar de Furr
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 171
    Points
    171
    Par défaut Déclarations & Source
    Bonjour,

    Je requiers votre aide afin de mener à bien une requête.

    Je travaille sur un PL/SQL simple, pour lequel je n'arrive pas à récupérer le code source.

    Je m'explique :

    J'ai deux scripts PL/SQL définissant un seul et même package, le premier étant sa déclaration, le second son code source (ou BODY), et je cherche la requête qui va me permettre de récupérer ce même code source.

    Voici les déclarations :

    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
    PACKAGE emp_mgmt AS 
    FUNCTION hire (last_name VARCHAR2, job_id VARCHAR2, 
       manager_id NUMBER, salary NUMBER, 
       commission_pct NUMBER, department_id NUMBER) 
       RETURN NUMBER; 
    FUNCTION create_dept(department_id NUMBER, location_id NUMBER) 
       RETURN NUMBER; 
    PROCEDURE remove_emp(employee_id NUMBER); 
    PROCEDURE remove_dept(department_id NUMBER); 
    PROCEDURE increase_sal(employee_id NUMBER, salary_incr NUMBER); 
    PROCEDURE increase_comm(employee_id NUMBER, comm_incr NUMBER); 
    no_comm EXCEPTION; 
    no_sal EXCEPTION; 
    END emp_mgmt;
    Et le BODY :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    CREATE OR REPLACE PACKAGE BODY emp_mgmt AS 
    tot_emps NUMBER; 
    tot_depts NUMBER; 
    FUNCTION hire 
    (last_name VARCHAR2, job_id VARCHAR2, 
     manager_id NUMBER, salary NUMBER, 
     commission_pct NUMBER, department_id NUMBER) 
    RETURN NUMBER IS new_empno NUMBER; 
    BEGIN 
    SELECT IDENTIFIANT.NEXTVAL
       INTO new_empno 
       FROM DUAL; 
    INSERT INTO T_DST_TRA 
       VALUES (new_empno, '1', '1'); 
       tot_emps := tot_emps + 1; 
    RETURN(new_empno); 
    END; 
    FUNCTION create_dept(department_id NUMBER, location_id NUMBER) 
    RETURN NUMBER IS 
       new_deptno NUMBER; 
    BEGIN 
       SELECT IDENTIFIANT.NEXTVAL
          INTO new_deptno 
          FROM dual; 
       INSERT INTO T_DST_TRA 
          VALUES (new_deptno, '2', '1'); 
       tot_depts := tot_depts + 1; 
       RETURN(new_deptno); 
    END; 
    PROCEDURE remove_emp (employee_id NUMBER) IS 
    BEGIN 
       DELETE FROM T_DST_TRA 
       WHERE T_DST_TRA.IDE_DST = remove_emp.employee_id; 
       tot_emps := tot_emps - 1; 
    END; 
    PROCEDURE remove_dept(department_id NUMBER) IS 
    BEGIN 
       DELETE FROM T_DST_TRA 
       WHERE T_DST_TRA.IDE_DST = remove_dept.department_id; 
       tot_depts := tot_depts - 1; 
       SELECT COUNT(*) INTO tot_emps FROM T_DST_TRA; 
    END; 
    PROCEDURE increase_sal(employee_id NUMBER, salary_incr NUMBER) IS 
    curr_sal NUMBER; 
    BEGIN 
       SELECT IDE_DST INTO curr_sal FROM T_DST_TRA
       WHERE T_DST_TRA.IDE_DST = increase_sal.employee_id; 
       IF curr_sal IS NULL 
          THEN RAISE no_sal; 
       ELSE 
          UPDATE T_DST_TRA 
          SET IDE_DST = employee_id 
          WHERE employee_id = employee_id; 
       END IF; 
    END; 
    PROCEDURE increase_comm(employee_id NUMBER, comm_incr NUMBER) IS 
    curr_comm NUMBER; 
    BEGIN 
       SELECT IDE_DST
       INTO curr_comm 
       FROM T_DST_TRA 
       WHERE T_DST_TRA.IDE_DST = increase_comm.employee_id; 
       IF curr_comm IS NULL 
          THEN RAISE no_comm; 
       ELSE 
          UPDATE T_DST_TRA 
          SET IDE_DST = comm_incr; 
       END IF; 
    END; 
    END emp_mgmt;
    J'ai actuellement la requête qui me retourne les déclarations, en revanche je n'arrive pas à en récupérer les sources :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TEXT FROM SYS.ALL_SOURCE WHERE TYPE = 'PACKAGE' AND NAME = 'EMP_MGMT' ORDER BY LINE

    Pourriez-vous m'aider pour trouver comment récupérer le source ?
    En espérant avoir été assez clair...

    Merci

  2. #2
    Membre habitué Avatar de Furr
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 171
    Points
    171
    Par défaut
    Bon très bien.... Je me suis rendu compte de mon erreur tout seul...

    Ma requête était la bonne, mis à part le type sur lequel je filtrais ma requête... Il fallait que je le fasse sur PACKAGE BODY et non PACKAGE

    Résultat, voici la requête que je cherchais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TEXT FROM ALL_SOURCE WHERE TYPE='PACKAGE BODY' AND NAME='EMP_MGMT' ORDER BY LINE
    Merci à ceux qui auraient eu le temps de me lire

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/03/2013, 20h39
  2. Réponses: 1
    Dernier message: 23/09/2006, 00h41
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. Réponses: 8
    Dernier message: 17/05/2002, 09h08

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