首页 > 解决方案 > 从 PHP 调用时未找到 DB2 函数

问题描述

我正在尝试使用 zend_db 从 PHP 调用 DB2 函数以连接到 DB2,并像这样调用 SQL 语句:

SELECT colA, colB, colC, mylib.testfunc(colA, colB, colC)
FROM otherlib.tableABC
WHERE colA = ... etc

(仅供参考,这里是调用一个返回特定值的RPG程序,所以它只返回一个值)。这在 ACS Run SQL Scripts 窗口中有效,但是当我尝试使用 Zend 时,我收到以下错误:

Fatal error:  Uncaught exception 'Zend_Db_Statement_Db2_Exception' with message 'TESTFUNC in MYLIB type *N not found. SQLCODE=-204'

我已经仔细检查以确保我的函数确实存在并且它在 mylib 中。进行谷歌搜索没有什么真正有用的。为什么它会告诉我它不存在?通过 Zend_DB 连接到 DB2 时,我必须配置什么特定的东西吗?

如果它很重要,我制作了这样的功能:

CREATE OR REPLACE FUNCTION mylib.testfunc(iA DECIMAL(2,0), iB CHAR(4), iC DECIMAL(2,0))
RETURNS CHAR(10)
MODIFIES SQL DATA
LANGUAGE SQL
BEGIN
    DECLARE oReturn CHAR(10) DEFAULT ' ';
    -- Here I call a procedure I created to call the RPG
    -- and format data...
    RETURN oReturn;
END

提前致谢。

标签: phpdb2

解决方案


PHP 和“ACS Run SQL Scripts”之间用于连接 Db2 的用户 ID(帐户名)是否相同?

如果没有,请验证用于 PHP 的帐户是否具有对函数以及函数调用的任何存储过程或外部程序/例程的执行访问权限。

此外,当您的 SQL 函数调用存储过程时,请考虑使用限定的存储过程名称。


推荐阅读