내가

2012-11-16 3 views
1

내가 DB2 (버전 6.01)이 방법으로 함수 생성 용 DB2에 CHAR 매개 변수를 사용하여 사용자 정의 함수를 호출 할 수 없습니다 :내가

CREATE FUNCTION myschema.test_c_c(param CHAR(1)) RETURNS CHAR(1) RETURN param; 

을하고 succses 메시지가와 "시스템을 전 네비게이터"내게 보여줘 myschema에서 작동합니다. 나는 다음과 같은 메시지 얻을

SELECT myschema.test_c_c('X') FROM SYSIBM.SYSDUMMY1; 

: :이 기능이 방법으로 호출 할 때

[SQL0204] TEST_C_C der Art *N in myschema nicht gefunden. 
[SQL State=42704, DB Errorcode=-204] 

"nicht의 gefunden"을 "을 (를) 찾을 수 없습니다"로 동일합니다. 오류 코드의

설명 -204 (그것의 일부, full error code Description here가)

"이름으로 식별되는 오브젝트가 DB2® 서브 시스템에 정의되어 있지 않습니다." 모두가 잘 작동 INT 매개 변수로

그리고 마침내

는 :

CREATE FUNCTION myschema.test_i_ri(param INT) RETURNS INT RETURN param; 
SELECT myschema.test_i_ri(4711) FROM SYSIBM.SYSDUMMY1; 
CREATE FUNCTION myschema.test_ii_ri(param1 INT, param2 INT) RETURNS INT RETURN param1 +param2; 
SELECT myschema.test_ii_ri(800, 15) FROM SYSIBM.SYSDUMMY1; 

어디 지점을 그리워?

는 내가 질문을하고 30 분 후에 나 자신에 의해 answere를 찾을 시도 오류 및 연구의 시간 후에 (나는 매우 유용한 찾기) SQL Workbench/J 모든 statmentens

답변

4

을 실행합니다.

문제점은 DB2에서 오버로드 된 함수의 해결책입니다.

SELECT myschema.test_c_c('X') FROM SYSIBM.SYSDUMMY1; 

이렇게하면 DB2는 'X'를 VARCHAR로 해석하지만 VARCHAR 매개 변수가있는 test_c_c의 버전이 없습니다. (즉,`CHAR`-수용 한), 나는 좋겠 나는 이미 '표준'버전을 선언하려는 경우, 개인적으로

CREATE FUNCTION cesdta.test_v_v(param VARCHAR(1)) RETURNS VARCHAR(1000) RETURN param; 
SELECT cesdta.test_v_v('X') FROM SYSIBM.SYSDUMMY1; 
+2

:

SELECT CESDTA.TEST_C_C(CAST('X' AS CHAR(1))) FROM SYSIBM.SYSDUMMY1; 

또는이 VARCHAR 함수를 선언 무엇 작품이다 전송/변환 할 다른 버전이 있고 원래 버전으로 퍼널됩니다. 그러나, 당신이 그것을 찾은 것을 잘 - 당신이 능력이있을 때 당신의 자신의 대답을 받아들이십시오. –