안녕하세요.
궁금한게 있어서 아래와 같이 문의 드립니다.
중계서버 트리거에 다이나믹 SQL을 사용하여 통신하고 있는데, 문자 컬럼에 single quotation(')이 들어가 오류가 발생되는 것으로 추정됩니다.
single quotation(') 문제를 해결 할 수 있는 방법이 있는지 여쭤봅니다.
[트리거 쿼리 예제]
ls_query := ' INSERT INTO ' ||ls_dbuser ||'IF_TABLE'||ls_dbname|| '( A, B, C, D, E, F, G, H, I, J, K, L )' || ' VALUES ('''
|| :NEW.A || ''',''' || :NEW.B || ''',''' || :NEW.C || ''',''' || :NEW.D || ''',''' || :NEW.E || ''',''' || :NEW.F || ''','''
|| :NEW.G || ''',' || :NEW.H || ',''' || :NEW.I || ''',''' || :NEW.J || ''',''' || :NEW.K || ''',''' || :NEW.L || ''')' ;
EXECUTE IMMEDIATE ls_query;
※ 급한 마음에 두서없이 작성하였습니다. 많은 양해 부탁드립니다.
Static Sql 과 Dynamic Sql 의 차이를 마치 Bind 변수 사용 과 미시용 처럼 생각하는데.
이는 잘못된 생각입니다. Dynamic Sql 과 Bind 변수 사용은 별개의 문제입니다.
Dynamic Sql 에서도 Bind 변수 사용 가능합니다.
ls_query := ' INSERT INTO ' || ls_dbuser || 'XI_COST' || ls_dbname || '( a, b, c, d, e, f, g, h, i, j, k, l)' || ' VALUES (:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, :l)'; EXECUTE IMMEDIATE ls_query USING :NEW.a, :NEW.b, :NEW.c, :NEW.d, :NEW.e, :NEW.f , :NEW.g, :NEW.h, :NEW.i, :NEW.j, :NEW.k, :NEW.l ;