gpt4 book ai didi

php - 从 Laravel 调用 Oracle PL/SQL 返回 CLOB

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

我正在使用 Laravel-OCI8 包从 Laravel 与 Oracle 数据库通信。我正在调用一个 oracle 函数,它将结果作为 CLOB 返回。这是 Laravel 代码:

$stmt = $this->pdo_obj->prepare("begin :result := test_pkg.get_data(:param1,:param2,:param3); end;");
$stmt->bindParam(':result', $result, \PDO::PARAM_STR);
$stmt->bindParam(':param1', $param1, \PDO::PARAM_STR);
$stmt->bindParam(':param2', $param2, \PDO::PARAM_STR);
$stmt->bindParam(':param3', $param3, \PDO::PARAM_STR);
$stmt->execute();
return response($result);

但我收到一个错误:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小

我也试过以下:

$response   = $this->oracle_obj->select("select test_pkg.get_data('$param1','$param2','$param3') as refc from dual");

但是在我的例子中不可能使用上面的调用,因为我的函数中有 DML 操作。有没有其他方法可以使用OCI8在Laravel中调用oracle的功能?

最佳答案

我认为问题不是 Laravel 的原因,也不是与使用任何其他方法调用 Laravel 中的 oracle 函数有关。使用$stmt->bindParam方法绑定(bind)参数和设置数据类型的长度,与参数指定正确的显式数据类型有关。根据官方 PHP 文档..

To indicate that a parameter is an OUT parameter from a stored procedure, you must explicitly set the length.

Refer to the data_type and length specification from PDOStatement::bindParam PHP doc http://php.net/manual/en/pdostatement.bindparam.php

举个例子

$sth->bindParam(':param1', $param1, PDO::PARAM_INT);
$sth->bindParam(':param2', $param2, PDO::PARAM_STR, 12);

引用

希望对你有帮助

关于php - 从 Laravel 调用 Oracle PL/SQL 返回 CLOB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49257413/

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