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
운영게시판
최근게시물
DB2 Q&A 817 게시물 읽기
No. 817
CREATE FUNCTION문에서 사용불가 명령문이...
작성자
DB2로 컨버젼중
작성일
2005-07-19 16:42ⓒ
2005-07-19 16:48ⓜ
조회수
7,250

----예문------------------------------------------------------

CREATE FUNCTION PG_FT_M_PSYCHO_EXE (P_CHA_ID VARCHAR(2))
RETURNS VARCHAR(1)
LANGUAGE SQL
MODIFIES SQL DATA

BEGIN ATOMIC


UPDATE FT_MEMBER_PSYCHO_LIVNG_TIMEZON U
SET (WEIGHT_H,WEIGHT_E)

= (SELECT WEIGHT_H,
WEIGHT_E
FROM FT_MEMBER_PSYCHO M
WHERE M.CHA_ID = U.CHA_ID
AND M.MEMBER_ID = U.MEMBER_ID
AND M.HOUSEHOLD_ID = U.HOUSEHOLD_ID);

 

RETURN 'Y';

END;

-----------------------------------------------------------------------------

위에 명령어 실행하면 에러나요

 

"MODIFIES SQL DATA "절과 관련된 키워드가 여러개 있거나 충돌합니다하고요.(SQL0628N)

 

혹시나 해서 "MODIFIES SQL DATA "절 삭제하고 실행하면

MODIFIES SQL DATA "절이 지정되지 않았지만, 함수 내용을 조사해 보면 지정해야 함을 알 수 있습니다.라고 에러메시지 나오더라구요(SQL0374N)

어떻게 해야 해결될지..

 

 

 

그리고 또한

제가 위의 CREATE FUNCTION문에

CALL문을 사용하여 PROCEDURE을 호출해야 하기도 하거든요

아래와 같은 예문 실행하면 위와 같은 에러가 발생합니다.

 

-----예문-------------------------------------------------------------

CREATE FUNCTION PG_FT_M_PSYCHO_EXE (P_CHA_ID VARCHAR(2))
RETURNS VARCHAR(1)
LANGUAGE SQL
MODIFIES SQL DATA

BEGIN ATOMIC

 

DECLARE G_JOB_STATUS VARCHAR(1);
CALL PG_FT_M_PSYCHO(P_CHA_ID, G_JOB_STATUS);

RETURN G_JOB_STATUS;

 

END;

------------------------------------------------------------------------

 

DB2 도움말 봐도 모르겠네요..도와 주세요 ㅠ.ㅠ

 

 

 

 

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

혹시 아래 테이블에 카운트해보셔서 결과 값이 같나 한번 확인해보시기 바랍니다.  결과 값이 일치하지 않아 나는 오류 같습니다.

즐거운 하루되세요

FT_MEMBER_PSYCHO_LIVNG_TIMEZON U

FT_MEMBER_PSYCHO M
아래 조건은

FT_MEMBER_PSYCHO_LIVNG_TIMEZON U

있는 WEIGHT_H,WEIGHT_E 개수와

FT_MEMBER_PSYCHO M
있는 WEIGHT_H,WEIGHT_E의

WHERE M.CHA_ID = U.CHA_ID
AND M.MEMBER_ID = U.MEMBER_ID
AND M.HOUSEHOLD_ID = U.HOUSEHOLD_ID

카운트 갯수가 같은지 확인해보시기 바랍니다. 혹시 널값이라도 들어가 있는지 ...

구광모님이 2005-07-20 07:17에 작성한 댓글입니다. Edit

테이블만 만든 상태이고

데이타를 아직 INSERT하지 않았거든요..

 

그러면 안되는 건가요?

장미옥님이 2005-07-20 16:21에 작성한 댓글입니다. Edit

1. 첫번째 예문

첫번째 예문에서는 MODIFIES SQL DATA 에 db2 UDB에 제약조건이 있습니다. 유닉스나 윈도우용 db2에서는 MODIFIES SQL DATA  사용시에 오직 SQL table function만을 지원합니다. 그러니까 지금처럼 함수를 만드시면 에러가 발생합니다.

MODIFIES SQL DATA 에 대한 예제입니다.

예)

CREATE FUNCTION getEmployee2(p_dept VARCHAR(3))
RETURNS TABLE
    (empno VARCHAR(6),
     lastname VARCHAR(15),
     firstnme VARCHAR(12))
LANGUAGE SQL
SPECIFIC getEnumEmployee2                 -- LUW and iSeries
MODIFIES SQL DATA                                                        -- (1)
--DISALLOW PARALLEL                       -- iSeries
ge2: BEGIN ATOMIC
  DECLARE v_cnt int DEFAULT 0;                                           -- (2)

  SET v_cnt = (SELECT COUNT(*) FROM employee WHERE workdept = p_dept);   -- (3)
  IF (v_cnt = 0) THEN
    INSERT INTO employee                                                 -- (4)
      (empno, firstnme, midinit, lastname, workdept, edlevel)
    VALUES ('000000', 'No Record', 'N', 'New Department', p_dept, 0);
  END IF;
  RETURN                                                                 --(5)
    SELECT e.empno, e.lastname, e.firstnme
    FROM employee e
    WHERE e.workdept=p_dept;
END ge2
return 문을 보시면  많이 틀리다는 것을 알수가 있습니다.
사용법도 테이블 함수로 사용하셔야 합니다.
그럼 ^^
김동주님이 2005-07-23 04:37에 작성한 댓글입니다.
이 댓글은 2005-07-23 04:38에 마지막으로 수정되었습니다. Edit

답변 감사합니다.

 

오라클과 다른 db2의 특징이군요..^^

장미옥님이 2005-07-25 14:44에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
820Merge & Commitcount [1]
장정연
2005-07-22
5729
819(구인)db2 아르바이트 구함~
올아클
2005-07-20
5038
818한글 글자 크기.?? [3]
이동국
2005-07-20
8608
817CREATE FUNCTION문에서 사용불가 명령문이... [4]
DB2로 컨버젼중
2005-07-19
7250
814[질문] ODBC로 연결하고, INSERT시 오류 [3]
바디
2005-06-27
6430
812DB2 (AS400) 에 PHP를 연동할려고 합니다. [1]
db2 초짜
2005-06-21
5870
811에러좀 꼭 좀 봐주세요. [1]
박영란
2005-06-18
5324
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다