Dynamic Sql 관련 문의 1 4 716

by 햇살가득 [SQL Query] [2018.08.21 10:55:01]


안녕하세요. 

궁금한게 있어서 아래와 같이 문의 드립니다.

   중계서버 트리거에 다이나믹 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;  

※ 급한 마음에 두서없이 작성하였습니다. 많은 양해 부탁드립니다.

by 마농 [2018.08.21 11:18:47]

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
;

 


by 우리집아찌 [2018.08.21 11:29:26]

우와.. 이거 처음 보내요.. 

완전 좋은데요...


by 햇살가득 [2018.08.21 13:43:02]

마농님 감사합니다. 그런데 혹시 첫번째 질문드렸던,,

DB_LINK를 통하여 다른 Characterset 으로 Interface 진행 시 문제가 될 수 있는 부분이 혹시 있는지 여쭤봐도 될까요??


by 햇살가득 [2018.08.21 12:22:00]

마농님 항상 감사합니다.

문자,숫자 Type 관계없이 적용 가능한지요? 바로 적용 해 보겠습니다.

 

 

 

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