【问题标题】:DB2 Function Not Found When Calling from PHP从 PHP 调用时未找到 DB2 函数
【发布时间】: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 的权限”或者你有什么。如果您想将其发布为答案,我会接受。

标签: php db2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2012-01-09
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多