CREATE
TABLE
Test (
id nvarchar2(6),
name
nvarchar2(10)
);
INSERT
INTO
Test
values
(
'id1'
,
'name1'
);
INSERT
INTO
Test
values
(
'id2'
,
'name2'
);
INSERT
INTO
Test
values
(
'id3'
,
'name3'
);
INSERT
INTO
Test
values
(
'id4'
,
'name4'
);
INSERT
INTO
Test
values
(
'id5'
,
'name5'
);
CREATE
OR
REPLACE
FUNCTION
Get_Test_Name( p_id_data
in
NVARCHAR2)
RETURN
NVARCHAR2
AS
TYPE refcursor
IS
REF
CURSOR
;
v_cursor REFCURSOR;
v_name NVARCHAR2(10);
v_result NVARCHAR2(1000);
v_id_dada NVARCHAR2(1000);
v_SQL VARCHAR2(1000);
BEGIN
v_id_dada :=
REPLACE
(p_id_data,
','
,
''
','
''
);
v_id_dada :=
''
''
|| v_id_dada ||
''
''
;
v_result :=
''
;
v_SQL :=
'SELECT name FROM Test WHERE ID IN ('
|| v_id_dada ||
')'
;
OPEN
v_cursor
FOR
v_SQL;
LOOP
FETCH
v_cursor
INTO
v_name;
EXIT
WHEN
v_cursor%NOTFOUND;
v_result := v_result || v_name||
','
;
END
LOOP;
CLOSE
v_cursor;
v_result := TRIM(BOTH
','
FROM
v_result);
RETURN
v_result;
END
;
/
COLUMN
"A"
FORMAT A10
COLUMN
"B"
FORMAT A15
COLUMN
"C"
FORMAT A20
COLUMN
"D"
FORMAT A25
SQL>
SELECT
2 Get_Test_Name(
'id1'
) A,
3 Get_Test_Name(
'id1,id2'
) B,
4 Get_Test_Name(
'id1,id2,id3'
) C,
5 Get_Test_Name(
'id1,id2,id3,id4'
) D
6
FROM
dual;
A B C D
name1 name1,name2 name1,name2,name3 name1,name2,name3,name4