동적 쿼리 좀더 쉽게 관리하기? 2 10 7,280

by jkson 동적쿼리 [2017.01.20 10:27:46]



procedure나 function에서 동적 쿼리 사용할 때 쿼리 자체에 따옴표가 있는 경우 관리하기가 까다롭죠.

쿼리를 바꾸려면 문자열 다 가지고 와서 ''를 '로 수정하고 쿼리 변경하고 다시 '를 ''로 바꾸고 뭐 이런 과정을 거치는데요.

10g 이후에 따옴표에 대한 처리를 할 수 있게 기능이 추가되어서 한번 적어봅니다.

DECLARE
 V_SQL VARCHAR2(4000);
 V_RESULT VARCHAR2(4000);
BEGIN
 V_SQL       := q'[select 'abcde' from dual where '1' = '1' ]' 
             || q'[and '2' = '2']' ;

 EXECUTE IMMEDIATE V_SQL INTO V_RESULT;

 DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;


q'[ 문자열 ]'  이런 식으로 작성하시면 됩니다.

다들 아시는 내용인가요?^^;

by 우리집아찌 [2017.01.20 10:35:30]

난 처음보는데... 완전신기..

 


by 지현명 [2017.01.20 10:51:10]

소문자 q(큐)인가요? 테스트 해봐야겠네요 

감사합니다.


by jkson [2017.01.20 11:01:51]

네 소문자 q 맞습니다~


by 야신 [2017.01.20 10:55:36]

오~ 신기하네요. 10g new feature 에서 못 봤던 내용인데...


by 마농 [2017.01.20 11:40:32]

대문자 Q 도 상관 없구요.

대괄호가 쿼리문에 포함되는 경우(정규식 등) 주의해야 겠네요.

대괼호 대신 다른문자로도 대체 가능합니다.

SELECT q'[select 'abcde' from dual where '1' = '1' ]'
    || q'[and '2' = '2']'
--  || Q'[and REGEXP_LIKE(col, '[^0-9]')]'  -- 대괄호가 중간에 닫히면서 오류 발생
    || Q'{and REGEXP_LIKE(col, '[^0-9]')}'
    || Q'$and REGEXP_LIKE(col, '[^0-9]')$'
  FROM dual
;

 


by jkson [2017.01.20 11:48:34]

select 부분 작성하면서 소문자로 바꿨더니..^^; 대문자도 되는 건 알았는데

대괄호 대신 다른 것도 되는 건 몰랐네요. 역시 디테일이 다르시네요.^^b


by 마농 [2017.01.20 11:50:00]
-- 알파벳 하나 붙이는 유사한 기능들 --
SELECT N'가가가'   -- NCAHR
     , 100D       -- Double
     , 100F       -- Flout
     , 10E3       -- 10 * 10^3
  FROM dual
;

 


by jkson [2017.01.20 12:03:13]

역시 저처럼 어설프게 아는 것보다는 메뉴얼을 통해서 확실히 알아야겠습니다.

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm


by 기리 [2017.11.07 15:10:59]

우와.....


by 스반 [2017.12.15 11:47:36]

좋은 정보 감사합니다~~!!

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