gpt4 book ai didi

php - 从 PHP 调用 Oracle 包中存在的函数/过程

转载 作者:可可西里 更新时间:2023-10-31 23:34:42 25 4
gpt4 key购买 nike

我正在使用 PHP-PDO 和 Oracle 11g。我正在使用具有许多函数和存储过程的 Oracle 包。现在,当我从 sql*plus 或 sql developer IDE 调用其中一个函数时,我运行此命令以获取结果集。

   select package_name.function_name(param1,param2) from dual

它工作正常并返回我的结果集。现在当我做同样的事情时,我从 PDO 异常处理中得到错误。 PHP 端的代码如下所示,

$stmt = "select package_name.function_name (?,?) from dual";
$res = $this->ConnOBJ->prepare($stmt);
$param1 = '1';
$param2 = null;
$result->bindParam(1,$param1);
$result->bindParam(2,$param2);
$result->execute();

然后我得到一个正在记录到我的日志文件中的异常。

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 904 OCIStmtExecute: ORA-00904: "PACKAGE_NAME"."FUNCTION_NAME"": invalid identifier  (/var/www/php-5.3.3/ext/pdo_oci/oci_statement.c:146)' in /opt/web/dir/ora_class.php:209 Stack trace: #0 /opt/web/dir/ora_class.php(209): PDOStatement->execute() #1 /opt/web/dir/ora_class.php(298): dbPDO->execPackage() #2 {main}   thrown in /opt/web/dir/ora_class.php on line 209

我是否以错误的方式传递查询?还是我以错误的方式绑定(bind)了参数?

更新

我现在已经将数据传送到 Oracle,并且找到了传递空值的方法。我现在的代码是

$stmt = "select package_name.function_name(?,?) from dual";
$res = $this->ConnOBJ->prepare($stmt);

$param1 = 1;
$param2 = null;

$res->bindParam(1,$param1,PDO::PARAM_INT);
$res->bindParam(2,$param2,PDO::PARAM_NULL);

$res->execute();
var_dump($res->fetchAll());

现在当我传递数据时,我得到了错误

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 932 OCIStmtFetch: ORA-00932: inconsistent datatypes: expected CHAR got DTYCWD  (/var/www/php-5.3.3/ext/pdo_oci/oci_statement.c:467)' in /opt/web/dir/ora_class.php:216 Stack trace: #0 /opt/web/dir/ora_class.php(216): PDOStatement->fetchAll() #1 /opt/web/dir/ora_class.php(305): dbPDO->execPackage() #2 {main}   thrown in /opt/web/dir/ora_class.php on line 216

我正在确保所有类型都正确,但我仍然返回相同的错误。我什至删除了空值并传入了一个字符串,并将 pdo 类型更改为 PDO::PARAM_STR,但它仍然给我错误。

最佳答案

函数接受一个还是两个参数?在 SQL*Plus 中,您要传递两个参数。在 PHP 中,您只传递一个。如果该函数需要两个参数并且没有仅采用一个参数的重载方法,则会出现此错误。

关于php - 从 PHP 调用 Oracle 包中存在的函数/过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4740376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com