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

Oracle Discussion :

function et base distante


Sujet :

Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Par défaut function et base distante
    Bonjour,

    J'essaye de compiler une fonction qui prendrais en parametre le nom de la base. (je suis sous oracle9i)

    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 FUNCTION UPTIME (v_base VARCHAR2 DEFAULT 'base9i') RETURN VARCHAR2 AS 
    v_uptime_days NUMBER (4);
    v_uptime_hours NUMBER (4,2);
    BEGIN
      SELECT trunc(SYSDATE-logon_time,0) "Days", (SYSDATE-logon_time)*24 "Hours"
      INTO v_uptime_days, v_uptime_hours
      FROM   sys.v_$session@v_base
      WHERE  sid=1;
      WHILE v_uptime_hours >= 24
      LOOP
      v_uptime_hours := v_uptime_hours - 24;
      END LOOP;
      RETURN to_char(v_uptime_days) || ' Day(s) ' || v_uptime_hours || ' Hour(s)';
    END;
    Le soucis comme vous vous en douter est que il ne veux pas compiler car il ne trouve pas v_base

    connaitriez vous un moyen d'executer ce genre de requetes (autres que de figer ne nom de la base?

    Cordialement,
    Vincent

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Par défaut
    J'utilise bien sur les database link.

  3. #3
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Le DBLINK ne peut pas être mis en variable bind (= mélange REQUETES, variable du programme)

    Il faut voir du coté du "EXECUTE IMMEDIATE"

    http://download-uk.oracle.com/docs/c...ynam.htm#13131

    ça devrait donner un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
    v_uptime_days NUMBER (4);
    v_uptime_hours NUMBER (4,2);
    v_sql varchar2(800);
    BEGIN
    v_sql  :=  'SELECT trunc(SYSDATE-logon_time,0) "Days", (SYSDATE-logon_time)*24 "Hours" ' ||
     ' INTO :1 , :2 ' ||
     ' FROM   sys.v_$session@'||v_base||
     ' WHERE  sid=1 ';
     
    EXECUTE IMMEDIATE v_sql INTO v_uptime_days, v_uptime_hours;
     
    ....

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Par défaut
    Merci pour ta réponse...

    J'ai l'impression qu'on est sur la bonne voie mais bizaremment, quand j'execute le code il me sort une erreur :
    Voici le code :
    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
     
    CREATE OR REPLACE
    FUNCTION UPTIME (v_base IN VARCHAR2) RETURN VARCHAR2 AS 
    v_uptime_days NUMBER (4);
    v_uptime_hours NUMBER (4,2);
    v_sql VARCHAR2(800);
    BEGIN
      v_sql := 'SELECT trunc(SYSDATE-logon_time,0) "Days", (SYSDATE-logon_time)*24 "Hours"' ||
      ' INTO :1, :2' ||
      ' FROM   sys.v_$session@' || v_base ||
      ' WHERE  sid=1';
     -- return v_sql;
    EXECUTE IMMEDIATE v_sql INTO v_uptime_days, v_uptime_hours;
      WHILE v_uptime_hours >= 24
      LOOP
      v_uptime_hours := v_uptime_hours - 24;
      END LOOP;
      RETURN v_uptime_days || ' Day(s) ' || v_uptime_hours || ' Hour(s)';
    END;
    et le code d'erreur :

    Error starting at line 1 in command:
    select uptime('multi9') from dual
    Error report:
    SQL Error: ORA-01745: nom de variable host/bind non valide
    ORA-06512: à "WEBUSER.UPTIME", ligne 11

    pourtant si je demande d'ecrire v_sql la requete est bonne....
    donc mystere

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Par défaut
    Finalement j'ai trouvé :

    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
    FUNCTION UPTIME (v_base IN VARCHAR2) RETURN VARCHAR2 AS 
    v_uptime_days NUMBER (4);
    v_uptime_hours NUMBER (4,2);
    v_sql VARCHAR2(800);
    BEGIN
      v_sql := 'SELECT trunc(SYSDATE-logon_time,0) "Days", (SYSDATE-logon_time)*24 "Hours" FROM sys.v_$session@' || v_base || ' WHERE  sid=1';
    EXECUTE IMMEDIATE v_sql INTO v_uptime_days, v_uptime_hours;
      WHILE v_uptime_hours >= 24
      LOOP
     v_uptime_hours := v_uptime_hours - 24;
     END LOOP;
      RETURN v_uptime_days || ' Day(s) ' || v_uptime_hours || ' Hour(s)';
    END;
    Merci pour votre aide.
    Vincent

  6. #6
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut


    Désolé, je l'ai écrit sans tester, En fait j'ai mélangé 2 méthodes... le "EXECUTE IMMEDIATE ... INTO ... var1, var2" et le "EXECUTE IMMEDIATE ... USING OUT var1, OUT var2"

    toutes mes confuses....

Discussions similaires

  1. acces à une base distante
    Par fredinarium dans le forum Installation
    Réponses: 3
    Dernier message: 08/09/2005, 20h14
  2. dbExpress et base distante
    Par vbcasimir dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/05/2005, 10h09
  3. SQLConnection et base distante ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 5
    Dernier message: 11/04/2005, 10h20
  4. Alter user sur une base distante
    Par bilo2000 dans le forum Administration
    Réponses: 13
    Dernier message: 09/03/2004, 17h18
  5. phpmyadmin sur base distante
    Par titi63 dans le forum Installation
    Réponses: 3
    Dernier message: 02/10/2003, 18h19

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