Function 에서 Distinct 중복제거 사용할 수 없나용? 0 6 2,399

by 망고닷 [2016.12.23 11:57:32]


CURSOR reg_seek IS   
        select
              wm_concat(DISTINCT p_payment) p_payment
        from a;
    reg reg_seek%ROWTYPE;

 

PL/SQL: ORA-30482: DISTINCT 옵션은 이 함수에 사용할 수 없습니다

 

위와 같은 오류가 발생합니다.

 

by jkson [2016.12.23 12:19:20]

원래 사용가능한데.. function에서 왜 그럴까요. 가끔 procedure나 function 컴파일할 때 syntax오류가 나는데요.

그럴 때는 동적쿼리로 변경해서 사용하시면 됩니다. 맛점요.

declare
var_col varchar2(10);
type cs is ref cursor;
cur cs;
squery varchar2(300) := 
'select to_char(wm_concat(distinct col)) col  from (
select 1 col from dual union all
select 2 col from dual union all
select 3 col from dual union all
select 3 col from dual
)';
begin
open cur for squery;
loop
fetch cur into var_col;
exit when cur%notfound;
dbms_output.put_line(var_col);
end loop;
end;

 

그게 아니면 그냥 쿼리를 바꾸시구요.

cursor reg_seek is   
select wm_concat(p_payment) p_payment
from
(select distinct p_payment
from a
);

 


by 우리집아찌 [2016.12.23 12:21:23]

오라클 12c 에서는 wm_concat 이 지원되지 않네요  쩝

 


by jkson [2016.12.23 12:24:31]

이건 약간 다른 문제 같은데요. 11g에서 테스트 했는데 function만들 때 커서에서 wm_concat이랑 distinct 같이 쓰니까 오류나요.


by 우리집아찌 [2016.12.23 13:06:45]

오류나서 못돌여봄 ㅜㅠ


by 우리집아찌 [2016.12.23 12:22:09]

http://www.gurubee.net/article/55512


by 망고닷 [2016.12.23 12:43:40]

jkson 님 말씀대로 동적쿼리로 해결은 되었습니다. ㅎㅎ

감사합니다. ㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입