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 1488 게시물 읽기
No. 1488
function 문법 관련 질문입니다.
작성자
db초보
작성일
2008-01-08 16:46
조회수
10,387
CREATE FUNCTION convert_issuer(issuer VARCHAR(2))
RETURNS VARCHAR(2)
CONTAINS SQL DETERMINISTIC NO EXTERNAL ACTION

     declare chg_issuer VARCHAR(2);
    
     IF issuer = '03' THEN      
         SET chg_issuer = '02';
     ELSEIF issuer = '02' THEN 
         SET chg_issuer = '03';
     ELSEIF issuer = '07' THEN  
         SET chg_issuer = '04';
     ELSEIF issuer = '04' THEN  
         SET chg_issuer = '05';
     ELSEIF issuer = '05' THEN 
         SET chg_issuer = '05';
     ELSEIF issuer = '04' THEN 
         SET chg_issuer = '05';
     ELSEIF issuer = '08' THEN  
         SET chg_issuer = '06';
     ELSEIF issuer = '09' THEN 
         SET chg_issuer = '01';
     ELSEIF issuer = '01' THEN 
         SET chg_issuer = '88';
     ELSE                        --error
         SET chg_issuer = '99';
     END IF;
     RETURN chg_issuer;

잘못된것이있나요??

CREATE FUNCTION convert_issuer(issuer VARCHAR(2))
RETURNS VARCHAR(2)
CONTAINS SQL DETERMINISTIC NO EXTERNAL ACTION
     declare chg_issuer VARCHAR(2)
DB21034E  명령이 유효한 명령행 처리기 명령이 아니므로 SQL문으로 처리되었습니다.
SQL 처리 중에 이 명령은 다음을 리턴했습니다.
SQL0104N  "NO EXTERNAL ACTION " 다음에 예기치 않은 토큰 "declare
chg_issuer"이(가) 있었습니다. 예상되는 토큰으로는 "<delim_returns>"이(가)
있습니다.  LINE NUMBER=4.  SQLSTATE=42601

IF issuer = '03' THEN SET chg_issuer = '02'
DB21034E  명령이 유효한 명령행 처리기 명령이 아니므로 SQL문으로 처리되었습니다.
SQL 처리 중에 이 명령은 다음을 리턴했습니다.
SQL0104N  "BEGIN-OF-STATEMENT" 다음에 예기치 않은 토큰 "IF issuer = '03'
THEN"이(가) 있었습니다. 예상되는 토큰으로는 "<create_proc>"이(가) 있습니다.
SQLSTATE=42601


등등의 에러들이 쭉쭉 나옵니다... 무엇이 잘못된건지...
이 글에 대한 댓글이 총 2건 있습니다.

이렇게 해보세요

create function convert_issuer( issuer VARCHAR(2))
RETURNS VARCHAR(2)
RETURN     
     CASE WHEN issuer = '03' THEN '02'
          WHEN issuer = '02' THEN '03'
          WHEN issuer = '07' THEN '04'
          WHEN issuer = '04' THEN '05'
          WHEN issuer = '05' THEN '05'
          WHEN issuer = '04' THEN '05'
          WHEN issuer = '08' THEN '06'
          WHEN issuer = '09' THEN '01'
          WHEN issuer = '01' THEN '88'
          ELSE '99'
     END

db2 "select convert_issuer('03') from sysibm.sysdummy1"

1
--
02

--님이 2008-01-08 17:46에 작성한 댓글입니다. Edit
와~~ 감사합니다..ㅜㅜ

해결되었습니다. 무지 감사드립니다. ^^
db초보님이 2008-01-08 19:08에 작성한 댓글입니다.
이 댓글은 2008-01-08 19:16에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1491with문을 이용한 임시테이블 생성시 [2]
지니
2008-01-11
9637
1490한글깨짐현상.. [1]
db초보
2008-01-11
13371
1489데이터 중복 처리 관련... [1]
DB2사랑
2008-01-10
10105
1488function 문법 관련 질문입니다. [2]
db초보
2008-01-08
10387
1487provider에 관해 질문드립니다.
김인철
2008-01-08
9154
1486보호된 메모리를 읽거나 쓰려고했습니다. 대부분 이러한 경우는 다른 메모리가 손상되었음을 나타냅니다. [1]
김인철
2008-01-08
20893
1485informix ->db2 중 date관련 [3]
부탁
2008-01-07
9563
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2021 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v13.3으로 자료를 관리합니다