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 :

problème avec les packages


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut problème avec les packages
    salut,
    je travaille actuellement sur oracle 10g express. j'ai créer un package contenant une variable que j'utilise pour générer une vue paramétrée. le problème est que la valeur de la variable ne change pas. voici la spécification et le corps du package.

    spécification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create or replace PACKAGE P1
    AS
       p   DATE default '01/03/07';
     
       FUNCTION GET_P
          RETURN DATE;
       PROCEDURE SET_P
       (P_DATE IN DATE);
    END;
    corps :

    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
     
    create or replace package body "P1" is
    function GET_P return DATE
     
    as
    begin
     RETURN p; /* insert function code */
    end GET_P;
     
    procedure SET_P(       P_DATE IN DATE
    )
    as
    begin
     p := P_DATE; /* insert procedure code */
    end SET_P;
     
    end P1;
    je travaille en localhost sur oracle 10g express, j'execute la commande EXECUTE pour changer la valeur de la variable mais apparement il ne la reconnait pas c'est pourquoi j'ai créer une fonction qui change la valeur de la variable et je l'appel comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select fonction('date a insérer dans la variable ')
    from dual

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Chez moi, ça marche.

    Tu n'as même pas besoin de créer le body.
    Tu peux accéder à p directement par P1.p

    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
    CREATE OR REPLACE PACKAGE P11
    AS
       p   DATE DEFAULT TO_DATE('01/03/07', 'DD/MM/YYYY');
     
       FUNCTION GET_P	RETURN DATE;
       PROCEDURE SET_P (P_DATE IN DATE);
    END;
    /
    CREATE OR REPLACE PACKAGE BODY "P11" IS
    FUNCTION GET_P RETURN DATE AS
    BEGIN
     RETURN p;
    END GET_P;
     
    PROCEDURE SET_P(P_DATE IN DATE) AS
    BEGIN
     p := P_DATE;
    END SET_P;
     
    END P11;
    /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BEGIN
    	DBMS_OUTPUT.PUT_LINE('1:' || p11.p);
    	p11.set_p(SYSDATE);
    	DBMS_OUTPUT.PUT_LINE('2:' || p11.p);
    	DBMS_OUTPUT.PUT_LINE('3:' || p11.GET_P);
    	p11.p := SYSDATE +2;
    	DBMS_OUTPUT.PUT_LINE('4:' || p11.p);
    END;
     
    1:01-MAR-07
    2:27-JUL-07
    3:27-JUL-07
    4:29-JUL-07

    Et sans les fonction et procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE PACKAGE P11
    AS
       p   DATE DEFAULT TO_DATE('01/03/07', 'DD/MM/YYYY');
    END;
    /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BEGIN
    	DBMS_OUTPUT.PUT_LINE('1:' || p11.p);
    	p11.p := SYSDATE;
    	DBMS_OUTPUT.PUT_LINE('2:' || p11.p);
    	p11.p := SYSDATE +2;
    	DBMS_OUTPUT.PUT_LINE('4:' || p11.p);
    END;
     
    1:01-MAR-07
    2:27-JUL-07
    4:29-JUL-07

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    ça marche aussi dans la fonction, j'affiche la valeur de la variable après mise à jour et elle affiche la nouvelle valeur mais quand je l'appelle dans la vue j'obtient le résultat pour la valeur par défaut de la variable et aussi quand je fais appelle à la fonction get_p elle affiche la valeur par défaut.

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    J'ai testé pour une vue, il faut en effet créer les fonctions.
    Mais ça marche quand même.


    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
    CREATE VIEW WMC_VIEW_PARAM
    AS SELECT p1.get_p AS pdate FROM DUAL
     
     
    SELECT *
    FROM WMC_VIEW_PARAM
     
    01/03/0007
     
    BEGIN
    	p1.set_p(SYSDATE);
    END;
     
    SELECT *
    FROM WMC_VIEW_PARAM
     
    27/07/2007 10:24:20
    Quel est ton code poru la vue ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    le code de la vue est très compliqué mais jele poste quand même :


    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
    
    CREATE OR REPLACE FORCE VIEW  "IMPAYE" ("CODE_UR_CYCLE1", "CODE_CATEGORIE_CYCLE1", "NOMBRE_FACT_EMISE_CYCLE1", "NOMBRE_FACT_IMPAYE_CYCLE1", "MONTANT_FACT_IMPAYE_CYCLE1", "NOMBRE_AV_IMPAYE_CYCLE1") AS 
      SELECT CODE_UR_CYCLE1, CODE_CATEGORIE_CYCLE1, NOMBRE_FACT_EMISE_CYCLE1, NOMBRE_FACT_IMPAYE_CYCLE1, MONTANT_FACT_IMPAYE_CYCLE1, NOMBRE_AV_IMPAYE_CYCLE1
      FROM
    (
    
    
    
    SELECT RC_UR_CODE AS CODE_UR_CYCLE1, SUBSTR (AGM_FACT_FPAYEUR, 1, 1) AS CODE_CATEGORIE_CYCLE1, COUNT (*) AS NOMBRE_FACT_IMPAYE_CYCLE1, SUM (AGM_FACT_IMPAYE) AS MONTANT_FACT_IMPAYE_CYCLE1
    FROM AGM_ABONNES_GZ ABONNE, AGM_FACTURE_GZ FACTURE, CF_ABONNE ABONNE_CF
    WHERE FACTURE.CF_AB_CODE = ABONNE.CF_AB_CODE AND FACTURE.CF_AB_REF = ABONNE_CF.CF_AB_REF AND FACTURE.CF_AB_CODE = ABONNE_CF.CF_AB_CODE AND FACTURE.CF_AB_REF = ABONNE.CF_AB_REF AND AGM_FACT_IMPAYE > 0 AND FACTURE.CF_AB_CODE = 'GZ' AND ADD_MONTHS (P1.get_p, -1) = CF_FACT_DATFACT
    GROUP BY RC_UR_CODE, SUBSTR (AGM_FACT_FPAYEUR, 1, 1)
    ),(
    SELECT RC_UR_CODE AS CODE_UR2, SUBSTR (AGM_FACT_FPAYEUR, 1, 1) AS CODE_CATEGORIE2, COUNT (*) AS NOMBRE_FACT_EMISE_CYCLE1
    FROM AGM_FACTURE_GZ FACTURE, CF_ABONNE ABONNE
    WHERE FACTURE.CF_AB_REF = ABONNE.CF_AB_REF AND FACTURE.CF_AB_CODE = ABONNE.CF_AB_CODE AND FACTURE.CF_AB_CODE = 'GZ' AND ADD_MONTHS (P1.get_p, -1) = CF_FACT_DATFACT
    GROUP BY  RC_UR_CODE, SUBSTR (AGM_FACT_FPAYEUR, 1,1)
    ),(
    SELECT RC_UR_CODE AS CODE_UR3, SUBSTR (AGM_FACT_FPAYEUR, 1, 1) AS CODE_CATEGORIE3, COUNT (*) AS NOMBRE_AV_IMPAYE_CYCLE1
    FROM AGM_ABONNES_GZ ABONNE, AGM_FACTURE_GZ FACTURE, CF_ABONNE ABONNE_CF
    WHERE FACTURE.CF_AB_CODE = ABONNE.CF_AB_CODE AND FACTURE.CF_AB_REF = ABONNE_CF.CF_AB_REF AND FACTURE.CF_AB_CODE = ABONNE_CF.CF_AB_CODE AND FACTURE.CF_AB_REF = ABONNE.CF_AB_REF AND AGM_FACT_IMPAYE > AGM_AB_AVPERC AND FACTURE.CF_AB_CODE = 'GZ' AND ADD_MONTHS (P1.get_p, -1) = CF_FACT_DATFACT
    GROUP BY RC_UR_CODE, SUBSTR (AGM_FACT_FPAYEUR, 1, 1)
    )
    WHERE CODE_UR3 = CODE_UR_CYCLE1 AND CODE_UR3 = CODE_UR2 AND CODE_CATEGORIE3 = CODE_CATEGORIE2 AND CODE_CATEGORIE3 = CODE_CATEGORIE_CYCLE1
    ORDER BY CODE_UR_CYCLE1, CODE_CATEGORIE_CYCLE1
    j'utilise la variable dans une condition pour tester la date. mais le problème est que la valeur de la variable reste la valeur par défaut donc jene pense pas que ce soit un problème de vue.

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ca devrait être bon. Tu initialises bien la variable dans la même session ?

    Essaye de tester avec une vue simple (select p1.get_p from dual)

  7. #7
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    j'essayer de créer la vue suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    create view A as
    select p1.get_p
    from dual

    puis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from A
    01/03/07

    cette fonction permet de changer la valeur de la variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select execution('01/12/05')
    from dual
    mais le résultat reste le même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from A
    01/03/07

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    je pense que c'est ta fonction d'affectation qui foire.

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec p1.set_p(sysdate);

  9. #9
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    il affiche l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00900 : instruction SQL non valide
    c'est la même chose avec execute?!!!

    voici le code de lafonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create or replace function "EXECUTION"
    (a in DATE)
    return DATE
    is
    begin
    P1.SET_P(a);
    return P1.p;
    end;

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tu utilises quel outil ? Sql+, Toad, Forms ?

    tu n'as pas donné le résultat de ton execution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select execution('01/12/05')
    from dual

  11. #11
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    si j'utilise le serveur de la base de données car je dois accéder à la base depuis ireport.(donc je crois aucune de ces 3 si j'ai bien compris)

  12. #12
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    la fonction execution retourne P1.p après changement de sa valeur donc quand j'éxécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select execution('01/12/05')
    from dual
    il affiche bien

    mais quand j'éxécute :

    il affiche

    qui est bien la valeur par défaut que j'ai attribué a la variable

  13. #13
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est un peu incompréhensible. T'es sur que c'est la même session ?

    Dernier recours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 'MAJ', execution(TO_DATE('01/06/05', 'DD/MM/RR'))
    FROM dual
    UNION ALL
    SELECT 'MEMO', get_p
    FROM a
     
    puis
     
    SELECT get_p
    FROM a

  14. #14
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour connaitre la session actuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SID
    FROM v$mystat
    WHERE ROWNUM = 1

  15. #15
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    bon c'est toujours la même chose.

  16. #16
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    en ce qui concerne la session
    j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    select execution('01/09/78')
    from dual
    puis j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT SID
    FROM v$mystat
    WHERE ROWNUM = 1
    ça affiché la 29.

    puis j'ai fait

    pour la session c'était la même 29.

  17. #17
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 'MAJ', execution(TO_DATE('01/06/05', 'DD/MM/RR'))
    FROM dual
    UNION ALL
    SELECT 'MEMO', get_p
    FROM a
    Te renvoies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MAJ 01/06/05
    MEMO 01/03/07
    ?

  18. #18
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Déja là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    p   DATE DEFAULT TO_DATE('01/03/07', 'DD/MM/YYYY');
    y a un ptit pb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p   DATE:=TO_DATE('01/03/2007', 'DD/MM/YYYY');

  19. #19
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ouais, je sais mais c'est pas ça qui fait foirer.
    Si la date sort en erreur le select execution plante.

    A moins qu'il y ait une erreur et que mehdiing ne l'ait pas vu.
    Mais il a dit que
    select execution('01/12/05')
    from dual
    renvoie 01/12/05
    Ou alors la fonction execution n'est pas celle qu'on croit.

  20. #20
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Je viens de faire (sous TOAD en 8.1.7)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    exec p11.set_p(TO_DATE('01/06/05', 'DD/MM/RR'));
    SELECT p11.get_p FROM dual;
    renvoie
    Comme attendu...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [IntelliJ Idea] problème avec les packages
    Par tnarol dans le forum IntelliJ
    Réponses: 1
    Dernier message: 22/11/2012, 12h24
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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