초보 님이 쓰신 글 :
:
http://www.danner-net.de/fb.htm
: 이곳에 있는 함수들을 사용하고 싶은데
: 사용하는 방법을 모르겠습니다.
:
: 그냥 IbExport 에서 procedure 실행하니 Procedure 에 1개가 추가는 되는데
: 쿼리 (select abc,lib_string_replace(abc,1,'-','') from test_table) 를 만들고
: 실행을 하니 lib_string_replace 함수가 없다고 나옵니다.
:
: procedure 에서는 있는데..
:
: 어느 부분을 수정해야 하는건가요?
:
: lib_string_recplce 함수는 아래와 같습니다.
: 부탁합니다
:
: create procedure lib_string_replace (
: strg_in varchar( 32765),
: strg_beg smallint,
: strg_search varchar( 32765),
: strg_replace varchar( 32765))
: returns (
: strg_out varchar( 32765),
: strg_replaced smallint)
: as
: declare variable strg_comp varchar( 32765);
: declare variable strg_pre varchar( 32765);
: declare variable strg_pst varchar( 32765);
: declare variable strg_len_orig smallint;
: declare variable strg_len_srch smallint;
: declare variable strg_len_repl smallint;
:
: begin
: /*
: replace substring
: str_beg : 1 ..
:
: examples:
: execute procedure lib_string_replace :strg_in, 1, 'to_replace', 'replacement'
: returning_values :strg_out, :strg_replaced;
:
: select my_table.my_text,
: (select lib_string_replace.strg_out
: from lib_string_replace( my_table.my_text, 1, 'MEMO:', 'Memo:'))
: from my_table;
:
: update my_table
: set my_table.my_text =
: (select lib_string_replace.strg_out
: from lib_string_replace( my_table.my_text, 1, 'MEMO:', 'Memo:'));
: */
:
: if ( (strg_in is null)
: or (strg_beg is null)
: or (strg_beg <= 0)
: or (strg_search is null)
: or (strg_replace is null))
: then
: begin
: strg_out = null;
: strg_replaced = null;
: end
: else
: begin
: strg_replaced = 0;
: execute procedure lib_string_len :strg_in
: returning_values :strg_len_orig;
: execute procedure lib_string_len :strg_search
: returning_values :strg_len_srch;
: execute procedure lib_string_len :strg_replace
: returning_values :strg_len_repl;
:
: while (strg_len_srch + strg_beg - 1 <= strg_len_orig)
: do
: begin
: execute procedure lib_string_len :strg_in returning_values :strg_len_orig;
:
: execute procedure lib_string_sub :strg_in, :strg_beg, strg_len_srch
: returning_values :strg_comp;
:
: if (strg_comp || '.' = strg_search || '.')
: then
: begin
: execute procedure lib_string_sub :strg_in, 1, :strg_beg - 1
: returning_values :strg_pre;
: execute procedure lib_string_sub :strg_in, :strg_beg + :strg_len_srch,
: :strg_len_orig - (:strg_beg + :strg_len_srch) + 1
: returning_values :strg_pst;
: strg_in = strg_pre || strg_replace || strg_pst;
:
: strg_beg = strg_beg + strg_len_repl - strg_len_srch;
:
: strg_replaced = strg_replaced + 1;
: end
:
: strg_beg = strg_beg + 1;
: end
:
: strg_out = strg_in;
: end
:
: suspend;
: end
안녕하세요.
까막입니다.
위 함수의 리턴값이 2개네요.
그러면 select abc,lib_string_replace(abc,1,'-','') from test_table 이렇게 하시면 오류가 납니다.
위처럼 하실 경우는 리턴값이 하나일 경우에나 사용 가능 하죠.
SELECT A.abc, B.strg_out varchar, B.strg_replaced
FROM Test_Table A
LEFT JOIN Lib_String_Replace(A.abc,1,'-','') B
ON (1 = 1)
이렇게 해보세요.
리턴값이 2개 이상일 경우는 하나의 테이블이라고 생각하시고, 조인 걸어 사용하시면 됩니다.
위대한 단군혼이 살아있는 나라.... 대한민국.