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 :

ORA-22992: cannot use LOB locators selected from remote tables


Sujet :

PL/SQL Oracle

  1. #1
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut ORA-22992: cannot use LOB locators selected from remote tables
    Bonjour,

    je rencontre cette erreur lorsque j'essaie d'effectuer un select sur une remote DB via un DB LINK.

    Le problème est que les colonnes que je souhaite retourner ne sont pas de type LOB mais varchar2 et number.

    J'ai bien des colonnes de type LOB dans les tables de ma requête mais elles ne sont pas demandées.

    J'ai trouvé le workaround pour résoudre le problème. Création d'une vue sur le remote DB et Select sur cette vue.

    Est-ce normal d'avoir un tel comportement même si les colonnes à retourner ne sont pas de type LOB??

    Voici ma procédure

    Code plsql : 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
    PROCEDURE GETCALLSTOIMPORT (SOURCE_DB IN VARCHAR2,
            TARGET_DB IN VARCHAR2,
            USERNAME  IN VARCHAR2,
            PASSWD    IN VARCHAR2,
            CLOSING_DATE IN VARCHAR2)
    IS
    V_DB_LINK VARCHAR2(100);
    TYPE REF_CURSOR IS REF CURSOR;
    V_CALL_ID_CUR REF_CURSOR;
    V_CALL_ID NUMBER;
    V_CALL_CODE VARCHAR2(100);
    V_CALL_CLOSE_DATE VARCHAR2(100);
    V_QUERY VARCHAR2(4000);
     
    BEGIN
    V_DB_LINK := CREATE_DB_LINK(SOURCE_DB, TARGET_DB, USERNAME, PASSWD);
    V_QUERY := 'SELECT DISTINCT EC.CALL_ID, EC.CALL_CODE, TO_CHAR ( START_DATE, ''DD-MM-YYYY HH24:MI:SS'')
        FROM  EPSS_CALL@'||V_DB_LINK||' EC 
        INNER JOIN EPSS_INSTRUMENT@'||V_DB_LINK||' EI ON ( EC.CALL_ID = EI.CALL_ID ) 
        INNER JOIN EPSS_WORKFLOWSTATE@'||V_DB_LINK||' EW ON ( EI.INSTRUMENT_ID = EW.INSTRUMENT_ID AND EI.CALL_ID = EW.CALL_ID ) 
        WHERE STATE_ID = 3 
        AND CALL_ID < 500 
        AND START_DATE < TO_DATE ( '''|| CLOSING_DATE ||''', ''DD-MM-YYYY HH24:MI:SS'' ) 
        AND EC.TYPE = 1 
        UNION 
        SELECT DISTINCT EC.CALL_ID, EC.CALL_CODE, TO_CHAR ( START_DATE, ''DD-MM-YYYY HH24:MI:SS'' ) 
        FROM  EPSS_CALL@'||V_DB_LINK||' EC 
        INNER JOIN EPSS_INSTRUMENT@'||V_DB_LINK||' EI ON ( EC.CALL_ID = EI.CALL_ID ) 
        INNER JOIN EPSS_WORKFLOWSTATE@'||V_DB_LINK||' EW ON ( EI.INSTRUMENT_ID = EW.INSTRUMENT_ID AND EI.CALL_ID = EW.CALL_ID ) 
        WHERE STATE_ID = 7 
        AND CALL_ID < 500 
        AND START_DATE < TO_DATE ( '''|| CLOSING_DATE ||''', ''DD-MM-YYYY HH24:MI:SS'' ) 
        AND EC.TYPE = 2 
        UNION 
        SELECT DISTINCT EC.CALL_ID, EC.CALL_CODE, TO_CHAR ( START_DATE, ''DD-MM-YYYY HH24:MI:SS'' ) 
        FROM  EPSS_CALL@'||V_DB_LINK||' EC 
        INNER JOIN EPSS_INSTRUMENT@'||V_DB_LINK||' EI ON ( EC.CALL_ID = EI.CALL_ID ) 
        INNER JOIN EPSS_WORKFLOWSTATE@'||V_DB_LINK||' EW ON ( EI.INSTRUMENT_ID = EW.INSTRUMENT_ID AND EI.CALL_ID = EW.CALL_ID ) 
        WHERE STATE_ID = 3 
        AND CALL_ID < 500 
        AND START_DATE < TO_DATE ( '''|| CLOSING_DATE ||''', ''DD-MM-YYYY HH24:MI:SS'' ) 
        AND EC.TYPE = 3';
    DBMS_OUTPUT.PUT_LINE(V_QUERY);
    OPEN V_CALL_ID_CUR FOR V_QUERY;
        LOOP
        FETCH V_CALL_ID_CUR INTO V_CALL_ID, V_CALL_CODE, V_CALL_CLOSE_DATE;
        EXIT WHEN V_CALL_ID_CUR%NOTFOUND;
        --IMPORT_CALL(V_CALL_ID);
        DBMS_OUTPUT.PUT_LINE(V_CALL_ID);
        END LOOP; 
    DROP_DB_LINK(V_DB_LINK);
    END GETCALLSTOIMPORT;

    Merci d'avance pour vos réponses.
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  2. #2
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut
    Un petit tour sur metalink.

    C'est un bug (366122.1).

    Pas encore résolu.

    Mais il y a un workaround. Ne pas utiliser la clause 'JOIN'.

    from T1 JOIN T2 ON --> from T1, T2 where t1.key = t2.key

    Voilà.
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

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

Discussions similaires

  1. Select from 2 tables
    Par riamo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/06/2013, 14h04
  2. Select from plusieurs tables
    Par leom4t dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2009, 20h53
  3. Réponses: 0
    Dernier message: 09/06/2009, 11h14
  4. Réponses: 10
    Dernier message: 21/12/2006, 10h55

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