에러가 발생하네요. 도와주세요.. 0 6 1,435

by 자이제시작이야 [SQL Developer] [2017.08.18 11:09:49]


---- 댓글에 있습니다 ----

by jkson [2017.08.18 11:50:40]

전반적으로 너무 많이 이상해서 뭐라 말씀드리기가..;

굳이 function과 procedure로 하지 않고 쿼리로 처리가능한 것 아닌지 검토해보셔야할 것 같은데요.

정확히 어떤 작업인지 자세히 설명 좀 해주시면 좋겠네요.

실제 데이터를 예를 들어주시면 더 좋고요.


by 자이제시작이야 [2017.08.18 13:15:51]

짜집기 한거 수정해서 하려다 보니까 정말 이상하네요... 이건 다시 정리해볼께요

다른거 봐주실수 있을까요?

create or replace function fn_question(v_ori varchar2, p_wordcount number)
return number 
is
v_return_type number := 0;
v_cnt number := 0;

begin

for i in 1..p_wordcount loop
    
    v_cnt := v_cnt + 1;
    
    
    if v_ori(v_cnt) = 'a' then
        v_return_type := 1;
    elsif v_ori(v_cnt) = 'b' then
        v_return_type := 1;
    elsif v_ori(v_cnt) = 'c' then
        v_return_type := 1;
    elsif v_ori(v_cnt) = 'd' then
        v_return_type := 2;
    elsif v_ori(v_cnt) = 'e' then
        v_return_type := 2;
    elsif v_ori(v_cnt) = 'f' then
        v_return_type := 2;
    end if;
end loop;
return v_return_type;

exception
    when others then
    return p_wordcount;
end;

 

 

v_ori 매개변수의 값이 a,b,c이면 return_type 1로 나타내고 d,e,f면 return_type 2로 나타내고 싶거든요.

근데 pls-00222 에러가 뜨네요....ㅠㅠ


by jkson [2017.08.18 14:01:48]

오류 원인은 v_ori는 단순히 varchar2로 정의되었는데

v_ori(v_cnt)의 형식으로 쓰였기 때문에 오류나는 것이구요.

이전 댓글에도 말씀드렸지만

왜 이런 function이 필요한지, 굳이 만들지 않고 처리할 수 있는 것은 아닌지

검토부터 해보셔야할 것 같습니다.

보통 쿼리로 만들기 난감하면 function으로 해결하려는 분들이 계신데

function 자체는 제대로 알고 사용하지 않으면 성능에 많은 악영향을 끼칩니다.

그런 이유로 function, procedure를 사용 못하게 하는 곳도 있구요.


by 자이제시작이야 [2017.08.18 14:07:27]

그럼 어떻게 해결할 수 있어요?

함수정의를 해놓고 프로시저단에서 정의된 함수를 사용하려고 생각했거든요.

프로시저에서 쿼리로 바로 짜는것 보단 함수명 불러서 쓰는게 아무래도 깔끔해보이지 않을까 하는 마음에.

제가 잘못 생각하고 있는건가요.....


by jkson [2017.08.18 14:50:59]

해당 기능이 여기저기 자주 사용되고 기능 변경의 가능성이 크다면

성능을 약간 포기하고 function으로 만드는 것도 한 방법이지만

프로시저를 깔끔하게 보이게 하려고 function을 사용한다는 건 잘못된 방법 같습니다.


by 자이제시작이야 [2017.08.18 15:05:46]

좋은 말씀 정말 감사합니다. 좋은 하루 되세요~~

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