Bonjour,
J'ai realise les fonctions suivantes (je les ai simplifie pour une meilleur comprehension de mon probleme):
Lorsque j'execute cette requete, j'ai l'erreur suivante:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 create type SERVICE_CUSTOMER as object (SERVICE_TYPE_NAME VARCHAR2(255), SERVICE_NAME VARCHAR2(255), CUSTOMER_NAME VARCHAR2(255)); / create type LIST_SERVICE as table of SERVICE_CUSTOMER; / CREATE OR REPLACE FUNCTION GET_REQ_SERVICE RETURN SYS_REFCURSOR IS l_ref SYS_REFCURSOR; test VARCHAR2(500); BEGIN test := 'select distinct ST.NAME as SERVICE_TYPE_NAME, ST.NAME as SERVICE_NAME, ST.NAME as CUSTOMER_NAME from service_type ST'; open l_ref FOR test; return l_ref; END GET_REQ_SERVICE; / CREATE OR REPLACE FUNCTION GET_SERVICES_INFO RETURN LIST_SERVICE PIPELINED IS l_ref2 SYS_REFCURSOR; -- SERVICE_CUSTOMER -> SERVICE_TYPE_NAME, SERVICE_NAME, CUSTOMER_NAME RES SERVICE_CUSTOMER := SERVICE_CUSTOMER(null,null,null); RES_CURS SERVICE_CUSTOMER; BEGIN l_ref2 := GET_REQ_SERVICE; LOOP FETCH l_ref2 into RES_CURS; EXIT WHEN l_ref2%notfound; RES.SERVICE_TYPE_NAME := RES_CURS.SERVICE_TYPE_NAME; RES.SERVICE_NAME := RES_CURS.SERVICE_NAME; RES.CUSTOMER_NAME := RES_CURS.CUSTOMER_NAME; PIPE ROW (RES); END LOOP; CLOSE l_ref2; return; END GET_SERVICES_INFO; /
Apres avoir passe pas mal de temps a chercher d'ou venais le probleme, je l'ai finallement trouve: c'est la ligne "FETCH l_ref2 into RES_CURS;" qu'il n'aimait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SQL> select * from table (GET_SERVICES_INFO); ERROR at line 1: ORA-00932: inconsistent datatypes: expected - got - ORA-06512: at "INVENTORY.GET_SERVICES_INFO", line
J'ai donc remplace mon res_curs par 3 variables VARCHAR2(255), ce qui m'a permis de resoudre mon probleme.
Par contre, je ne comprends toujours pas pourquoi oracle n'a pas aime quand j'ai utilise la variable RES_CURS de type SERVICE_CUSTOMER dans le fetch ... into?
N'est-il pas possible de l'utiliser?
Partager