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:
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.