【发布时间】:2019-08-30 14:21:28
【问题描述】:
我正在尝试使用 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
提前致谢。
【问题讨论】:
-
PHP 和 'ACS Run SQL Scripts' 之间连接 Db2 的用户 ID(帐户名)是否相同?如果没有,请验证用于 PHP 的帐户是否具有对函数 和 函数调用的任何存储过程或外部程序的执行访问权限。此外,当您的 SQL 函数调用存储过程时,它是否使用限定名称(带有模式),此外,该存储过程是否已编目?
-
为什么总是权限错误?谢谢!我什至没有想过要检查,通常错误告诉我“xyz 没有反对 abc 的权限”或者你有什么。如果您想将其发布为答案,我会接受。