无法在DB2 for i上使用CHAR参数调用用户定义的函数

时间:2012-11-16 09:17:42

标签: db2 ibm-midrange params create-function

我以这种方式在DB2(版本6.01)中创建一个函数:

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

并获取一条succses消息,“System i Navigator”在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;

我在哪里错过了这一点?

我用SQL Workbench/J执行所有状态(我觉得非常有用)

1 个答案:

答案 0 :(得分:4)

经过几个小时的尝试错误和研究后,我问了问题,然后30分钟后我自己找到了答案。

问题是DB2中重载函数的解析。致电时

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

这样,DB2将'X'解释为VARCHAR,但我没有使用VARCHAR参数的test_c_c版本。什么工作

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

或声明VARCHAR函数:

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