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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    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 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
    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
    Invité
    Invité(e)
    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 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
    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
    Invité
    Invité(e)
    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 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
    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)

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

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 Invité 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