database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39550 게시물 읽기
No. 39550
PL/SQL 살려주세요 ㅠㅠ
작성자
햇살한조각
작성일
2012-07-20 13:38
조회수
6,178

 안녕하세요....

 

프로시져에서 DYNAMIC SQL을 만들려고 하는데요....

 

EXECUTE IMMEDATE로 하려고 합니다....

 

그런데 문제는 DYNAMIC으로 만들어지는 문구 안에 SINGLE QUOTATION(')이 들어간다는겁니다.....

 

예를 들면 

SELECT COL_A, COL_B

FROM TAB_A

WHERE (COL_A, COL_B) IN (/*DYNAMIC*/) << 여기에 ('A', '가'), ('B', '나') 이런식으로.......

 

고수님들의 도움이 절실합니다.. ㅠㅠ

 

이 글에 대한 댓글이 총 7건 있습니다.

 ' 대신에 '' 을 넣으면 됩니다.

쌍따옴표가 아닌 ' 를 두번 쓰셔야합니다.

(''A'',''가''), (''B'',''나'')

정명곤(jinrang)님이 2012-07-20 15:06에 작성한 댓글입니다.

 아니면

 

EXCUTE IMMEDIATE 'SELECT :1, :2 FROM DUAL' USING '가','나';

 

이렇게 하셔도 됩니다.

 

저같은 경우에는 위의 것은 상수일때 변수일때는 아래것을 주로 사용하고 있습니다.

정명곤(jinrang)님이 2012-07-20 15:08에 작성한 댓글입니다.

정명곤님 감사합니다.. ^^

 

근데.... 제가 질문을 좀 잘못 올렸네요.... ㅠㅠ

제가 원했던건 

V_DYNAMIC_CONDITION := ('A', '가'), ('B', '나'), .............................................. ;

이렇게 해서 V_DYNAMIC_CONDITION을 동적으로 만들어서 위의 /*DYNAMIC*/ 부분에 넣으려고 했던거거든요....

근데 위에 변수 바인딩 하는곳에서 SINGLE QUOTATION이 있어서 문제가 되고 있습니다....

 

다시 한번 도움 부탁드립니다..... (__)

 

햇살한조각님이 2012-07-20 16:06에 작성한 댓글입니다. Edit

대충 만들어서 여러가지가 고려가 안되어 있습니다.

IN의 값이 여러개라면 아래처럼 실행하면 에러 납니다. 

여러행 인출한다고 에러납니다.

 

CREATE OR REPLACE PROCEDURE ABC IS

 

 V_SQL VARCHAR2(1000);

 V_DY  VARCHAR2(1000);

 V_VAL VARCHAR2(1000);

 V_VAL2 VARCHAR2(1000);

 

BEGIN

 

    V_DY := ' (''가'',''가''),(''나'',''나'')';

   

   V_SQL := 'SELECT VAL, VAL2 FROM AX 

                   WHERE (VAL, VAL2) IN (' || V_DY || ')';

                   

   

   EXECUTE IMMEDIATE V_SQL INTO V_VAL, V_VAL2;

   

   DBMS_OUTPUT.PUT_LINE ( V_VAL || V_VAL2);

   

   EXCEPTION

     WHEN NO_DATA_FOUND THEN

       NULL;

     WHEN OTHERS THEN

       -- Consider logging the error and then re-raise

       RAISE;

END ABC;

/

 

 

정명곤(jinrang)님이 2012-07-20 17:02에 작성한 댓글입니다.

 그런데 근본적으로

여러행을 인출하는 SELECT는 EXECUTE IMMEDIATE로 처리가 안될텐데요

그 부분은 알아서 하시리라 믿고 ^_^;

정명곤(jinrang)님이 2012-07-20 17:06에 작성한 댓글입니다.

CREATE OR REPLACE PROCEDURE abc
IS
  v_sql  VARCHAR2(1000);
  v_dy   VARCHAR2(1000);
  v_val  VARCHAR2(1000);
  v_val2 VARCHAR2(1000);
  TYPE ref_cursor_type IS REF CURSOR;
  rc   ref_cursor_type;
BEGIN
  v_dy  := '(''가'',''가''),(''나'',''나'')';
  v_sql := 'SELECT val, val2
              FROM ax
             WHERE (val, val2) IN (' || v_dy || ')';
  --DBMS_OUTPUT.PUT_LINE(v_sql);
  OPEN rc FOR v_sql;
  LOOP
    FETCH rc INTO v_val, v_val2;
    EXIT WHEN rc%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_val || '/' || v_val2);
  END LOOP;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    NULL;
  WHEN OTHERS THEN
    -- Consider logging the error and then re-raise
    RAISE;
END;
/

마농(manon94)님이 2012-07-20 17:36에 작성한 댓글입니다.

정명곤님, 마농님....

친절하고 정확한 답변 감사합니다. ^^

 

 

햇살한조각님이 2012-07-23 11:44에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39553oracle golden gateway 에 대하여 아시는 분 계시나요? [2]
김흥수
2012-07-23
4739
39552데이터 중에 깨진한글 파일 등을 조회하는 방법이 있을까요
강대성
2012-07-20
4753
39551오라클 정규식에 대해 질문드립니다. [1]
정명곤
2012-07-20
5778
39550PL/SQL 살려주세요 ㅠㅠ [7]
햇살한조각
2012-07-20
6178
39549oracle 에서 mysql 의 memorydb 같은게 있나요? [3]
이철림
2012-07-20
5038
39548drop table에 관해 문의 드립니다. [2]
태경파
2012-07-20
4765
39547rollup에 대해 문의 드립니다. [3]
안양
2012-07-19
5884
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다