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 41122 게시물 읽기
No. 41122
function 에서 if문 사용 sql 쿼리 문 질문
작성자
skywolker
작성일
2016-04-14 12:35
조회수
7,502

안녕하세요..

 

 

아래와 같이 function 에서 if 문을 쓰려고 sSQL := 이 변수에 쿼릴를 담아 사용하려고 하는데

 

 

아래 소스에서 어떤 부분이 문제가 있는건지 모르겠네요... 컴파일이 안되는데...

 

 

sSQL := 변수에 쿼리를 담기 전에는 컴파일 되고 이상없는 것은 확인했습니다.

 

 

무엇이 문제 일까요??

 

 

 

 

 

CREATE OR REPLACE FUNCTION CO.SF_TW_ORDERITEM_TEST

(

iACCT_CODE IN VARCHAR2

,iBASE_DATE IN VARCHAR2 DEFAULT TO_CHAR(SYSDATE,'YYYYMMDD')

,iROOM_CODE IN VARCHAR2

,iITEM_CODE IN VARCHAR2

)

RETURN TTYPE_TW_ORDER AS

vFROM_DATE VARCHAR2(8);

vFROM_DATE2 VARCHAR2(8);

vROOM_CODE VARCHAR2(10);

 

v_tab TTYPE_TW_ORDER := TTYPE_TW_ORDER();

 

sSQL VARCHAR2(4000);

 

BEGIN

 

 

FOR cur IN (

 

sSQL := ' SELECT ';

sSQL := sSQL || ' '' '' AS ACCT_CODE ';

sSQL := sSQL || ' ,'' '' AS ORDR_DIV ';

sSQL := sSQL || ' ,'' '' AS ORDR_DATE ';

sSQL := sSQL || ' ,'' '' AS DELV_DATE ';

sSQL := sSQL || ' ,'' '' AS ITEM_CD ';

sSQL := sSQL || ' ,'' '' AS ORDR_QTY ';

sSQL := sSQL || ' ,'' '' AS ROOM_CODE ';

sSQL := sSQL || ' ,'' '' AS CUST_CODE ';

sSQL := sSQL || ' FROM DUAL ';

 

 

IF Length(iROOM_CODE) > 0 THEN

sSQL := sSQL || ' where room_code = ''N''';

ELSE

sSQL := sSQL || ' where room_code = ''Y''';

END IF;

 

)

LOOP

v_tab.extend;

 

v_tab(v_tab.last) := RTYPE_TW_ORDER(

cur.ACCT_CODE

,cur.ORDR_DIV

,cur.ORDR_DATE

,cur.DELV_DATE

,cur.ITEM_CD

,cur.ORDR_QTY

,cur.ROOM_CODE

,cur.CUST_CODE

);

END LOOP;

 

 

 

RETURN v_tab;

 

END SF_TW_ORDERITEM_TEST;

/

 

 

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

아래 예제를 참조하시면 원하시는 결과를 얻으실수 있을것 같네요.

 

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm

 

DECLARE

  TYPE EmpCurTyp  IS REF CURSOR;
  v_emp_cursor    EmpCurTyp;
  emp_record      employees%ROWTYPE;
  v_stmt_str      VARCHAR2(200);
  v_e_job         employees.job%TYPE;
BEGIN
  -- Dynamic SQL statement with placeholder:
  v_stmt_str := 'SELECT * FROM employees WHERE job_id = :j';

  -- Open cursor & specify bind argument in USING clause:
  OPEN v_emp_cursor FOR v_stmt_str USING 'MANAGER';

  -- Fetch rows from result set one at a time:
  LOOP
    FETCH v_emp_cursor INTO emp_record;
    EXIT WHEN v_emp_cursor%NOTFOUND;
  END LOOP;

  -- Close cursor:
  CLOSE v_emp_cursor;
END; 

 

고서진(longflat)님이 2016-04-18 21:09에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41125단순 쿼리 질문입니다. [3]
오두현
2016-04-18
7542
41124어려운 쿼리 질문드립니다 [1]
홍승종
2016-04-15
7453
41123US7ASCII 일때 중국어 입력??? [1]
궁금이
2016-04-15
7289
41122function 에서 if문 사용 sql 쿼리 문 질문 [1]
skywolker
2016-04-14
7502
41121특정 문자로 끝나는 문자열 자르기 [1]
초보자
2016-04-14
8062
41120bat파일 관련해서 질문 올립니다..
초보DBA
2016-04-14
7036
41119나머지 수량 처리 [1]
바람이
2016-04-12
7297
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다