Bonjour,

J'ai realise les fonctions suivantes (je les ai simplifie pour une meilleur comprehension de mon probleme):
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;
/
Lorsque j'execute cette requete, j'ai l'erreur suivante:

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