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 2996 게시물 읽기
No. 2996
Function 만들 때 chr 함수 또는 mod 함수 사용은?
작성자
박소연
작성일
2010-07-29 15:55
조회수
10,676

DB2에서 함수를 만들기가 여가 까다로운게 아니네요~ 문서가 많은 것도 아니고..

제가 함수를 만드는에 함수내에서 chr 함수 나 mod함수를 사용은 어떻게 해야하는지요?

CREATE FUNCTION FUNC_digitToString(v_num NUMERIC(10))
RETURNS VARCHAR(1)
BEGIN ATOMIC
        DECLARE v_digitStr varchar(1);

    if (v_num<10) then
      set v_digitStr = char(v_num);
    else
      set v_digitStr = chr(ascii('A') + v_num - 10);
        END IF;

    return v_digitStr;
END@

위를 생성을 하면 아래와 같이 메세지가 나옵니다.

SQL0440N  No authorized routine named "CHR" of type "FUNCTION" having
compatible arguments was found.  LINE NUMBER=9.  SQLSTATE=42884

또한 mod 함수는 아래와 같이 사용을 하였습니다.

    WHILE (v_dividend != 0) DO
      SET v_remainder = mod(v_dividend, v_radix);
      SET v_numStr = FUNC_digitToString(v_remainder) || v_numStr;
      SET v_dividend = trunc(v_dividend / v_radix);
    END WHILE;

이 구문이 들어간 함수를 실행하면 아래와 같이 메세지가 나옵니다.

SQL0440N  No authorized routine named "MOD" of type "FUNCTION" having
compatible arguments was found.  LINE NUMBER=28.  SQLSTATE=42884

이를 어떻게 해결을 해야하는지 계속 헤매고 있습니다. 도와주세요~^^;;

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

오타가 아닐런지 싶어서 조심스레 댓글 드려봅니다.

 

  SELECT chr(ascii('A') + 11 - 10)
    FROM SYSIBM.SYSDUMMY1 ;
 

는 오류가 나는데

  SELECT char(ascii('A') + 11 - 10)
    FROM SYSIBM.SYSDUMMY1 ;
 

는 오류가 안나네요.

 

혹시  찾으시는 기능이

  VALUES(to_char(11), mod(10, 3))

요런건 아니시겠죠~ ^^: 

현재 파견 사이트가 열어준 사이트가 극히 드물어서 db2 정보를 찾고자 기웃거리고 있네요~ ^^

 

ps. db2가 버젼에 따라 지원해주는 함수가 많이 다른거지 싶으니 안될런지도 모르겠네요.

암비님이 2010-08-03 11:30에 작성한 댓글입니다.
이 댓글은 2010-08-03 11:31에 마지막으로 수정되었습니다. Edit

답변 감사드립니다...

제가 해결한 방법은 DB2에서는 함수 생성 시 RETURNS 타입으로 넘겨줘야 한다는 것이였습니다.

즉, 계산식으로 나온 변수에 대해서 RETURNS 타입으로 변환을 하여 넘겨주어야 하더군요.

아래와 같이 해결을 하였습니다.

DECLARE v_ascii INTEGER;    -> 추가선언
 
 if (v_num<10) then 
      set v_digitStr = char(v_num); 
else
     set v_ascii = ascii('A') + v_num - 10; 
     set v_digitStr = chr(v_ascii);   --> 추가 선언
end if; 
return v_digitStr;  -> 추가 선언한 변수로 return 함.
END@
 

정말 DB2는 버전에 따라 상이한 것도 많은 것 같고 많은 노력이 필요한 것 같습니다.^^;

이상입니다.

박소연(soyoun95)님이 2010-10-25 23:24에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
2999Update 문 사용으로 일련번호 부여법 (row_number 이용) [2]
김성봉
2010-08-13
11510
2998db2의 쿼리를 oracle 쿼리로 변경작업을 하려고합니다.
국오
2010-08-11
7211
2997db2 개발툴... [1]
암비
2010-08-05
7979
2996Function 만들 때 chr 함수 또는 mod 함수 사용은? [2]
박소연
2010-07-29
10676
2995AIX에 DB2 9.1버젼 설치한 후 계정및 권한 생성하는 방법
질문드려요.
2010-07-28
7782
2994'OR 1=0' 은 어떤 기능을 하는지.. 도져히 모르겠습니다. ㅜㅜ [3]
유비브로
2010-07-22
7160
2991여러 컬럼의 기간을 합치고 싶습니다
이상진
2010-07-15
6853
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다