1

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

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

并获得一条成功消息,“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的解释(部分,完整的错误代码描述在这里

“由名称标识的对象未在 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执行所有 statmentens (我觉得这非常有用)

4

1 回答 1

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;
于 2012-11-16T10:38:34.070 回答