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 :

La chasse aux dblinks


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut La chasse aux dblinks
    Bonjour a tous

    -- Oracle 11g, linux 5

    Je suis en train de creer un graph avec "R"
    qui est destiné a desiner un MAP des dblinks d'une base de données. J'arrive a un resultat pas trop mal (je donne le script R a tous ceux qui seront interessés).
    Mais il y a une fonction que je n'arrive pas a desiner. Le graph affiche la quantité de dblink public, la quantité de dblink <> public et desine une ligne qui va vers la destination.
    Je voudrais pouvoir desiner en rouge les dblink qui n'arrive nulle part...

    Par exemple ce dblink fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select count(1) from dual@monlink;
     
      COUNT(1)
    ----------
             1
    et celui ci ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     select count(1) from dual@ORAC4;
    select count(1) from dual@ORAC4
                              *
    ERROR at line 1:
    ORA-02019: connection description for remote database not found
    Mon probleme est de capturer ce resultat. Lorsque le resultat est 1 c'est ok mais lorsque le dblink ne fonctionne pas j'ai un ORA-
    Et je sais pas le capturer avec une simple requête SQL, je ne souaite pas utiliser PL car avec R je sais pas trop comment recuperer la sortie.

    l'ideal serait un decode ou un case de la requete select count(1) from dual@

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select case count(1) when 1 then 1 else 0 end from dual@LINK;
    Avec ce CASE si le dblink existe j'obtient : 1 mais s'il n'existe pas j'ai pas 0 j'ai le ORA-
    sniff

    Quelqu'un a une idée ?

    D'avance merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Citation Envoyé par ldiaz Voir le message
    je ne souaite pas utiliser PL car avec R je sais pas trop comment recuperer la sortie.
    Et avec une fonction pipeline pour catcher l'exception et renvoyer 0 ?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Bonsoir

    je viens de regarde la doc de pipelined... je vois pas comment l'utiliser a partir d'une requête.
    Dans la doc ils parlent de bloc PL...
    T'as pas un exemple ?
    D'avance merci

  4. #4
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Tu ne vas pas pouvoir catcher tes erreurs et exception directement en sql. C'est pas vraiment fait pour.

    Par contre, effectivement, en PL, tu vas pouvoir le faire
    Tu vas retrouver un bloc classic en PL de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE
       LE$Fin  Exception ;
       …
    Begin
       …..
       Raise LE$Fin ;
       …
    EXCEPTION
       WHEN LE$Fin Then
           ……….
    END ;
    Dans ta partie exception, c'est la que tu vas pouvoir gerer ton cas d'erreur.
    http://sheikyerbouti.developpez.com/...age=Chap1#L1.3

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Salut
    oui en PL pas de probleme.. Bon alors je vais essayer de placer du code PL dans "R".
    Je passerais les commentaire ici si je trouve une solution qui fonctionne.

    Merci a tous !

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Pas forcément besoin d'une fonction pipelined une fonction table suffit.
    Je pensais à un truc comme ça :
    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
    SQL> create or replace function func_test_dblink (p_dblink in varchar)
      2  return sys.odcinumberlist
      3  as
      4    dblink_fail EXCEPTION;
      5    PRAGMA EXCEPTION_INIT(dblink_fail, -2019);
      6    l_tab sys.odcinumberlist := sys.odcinumberlist();
      7  begin
      8    l_tab.extend;
      9    execute immediate 'select 1 into l_tab(l_tab.last) from dual@'||p_dblink;
     10    return l_tab;
     11  exception
     12    when dblink_fail then
     13      l_tab(l_tab.last) := 0;
     14      return l_tab;
     15  end;
     16  /
     
    Function created.
     
    SQL> select * from table(func_test_dblink('TOTO'));
     
    COLUMN_VALUE
    ------------
               0
     
    SQL>
    Après on peut améliorer la fonction pour qu'elle renvoie la liste des dblinks avec le code asssocié.

    Et donc ce qui est pratique c'est que dans R on passera une requête SQL et pas du code PL/SQL qui reste stocké dans Oracle.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/02/2010, 10h23
  2. Chasse aux Warnings générés par Utilcls.h
    Par JeanNoel53 dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2009, 19h41
  3. La chasse aux bugs (jeu d'Echecs)
    Par Sub0 dans le forum Développement 2D, 3D et Jeux
    Réponses: 117
    Dernier message: 06/11/2008, 09h46
  4. [Upload] la chasse aux dossiers vides
    Par tremeur53 dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2007, 17h54
  5. La chasse aux fuites de mémoire
    Par TocTocKiéLà? dans le forum Choisir un environnement de développement
    Réponses: 4
    Dernier message: 02/09/2007, 20h35

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