如何使用学说调用带有输出参数的Oracle存储过程?

问题描述 投票:0回答:3

我一直在使用 Oracle 中调用存储过程,执行以下操作:

$sql = "CALL namespace.my_proc(".$data_source_id.", to_date('".$account_period_start."', 'YYYY-MM-DD'),'".$updated_by."')";

$stmt = $this->getDoctrine()->getManager('fdw')->getConnection()->prepare($sql);
            $result = $stmt->execute();
            $stmt->closeCursor();

现在 DBA 团队已更改其中一个存储过程以接受 2 个输出参数(x 和 y),但我不明白如何实现这一点。有人可以帮我吗?

谢谢你

symfony doctrine-orm oracle11g doctrine
3个回答
3
投票

我能够找到信息。希望它对某人有帮助。

$sql = "CALL namespace.my_proc(".$data_source_id.", to_date('".$account_period_start."', 'YYYY-MM-DD'),'".$updated_by."', :x, :y)";
  $stmt = $this->getDoctrine()->getManager('fdw')->getConnection()->prepare($sql);
            $stmt->bindParam(':x', $x, \PDO::PARAM_INPUT_OUTPUT, 32);
            $stmt->bindParam(':y', $y, \PDO::PARAM_INPUT_OUTPUT, 32);
            $result = $stmt->execute();

0
投票

对于最新版本的学说:

$sql = 'call my_proc(:arg1, :arg2)';
$stmt = $em->getConnection()->prepare($sql);
$stmt->executeQuery([
    ':arg1' => 82,
    ':arg2' => 'Foo',
]);

但是,对于输出参数,您可以对函数应用相同的逻辑:

$sql = 'BEGIN :total := sum(:num1, :num2); END;';
$stmt = $em->getConnection()->prepare($sql);
$stmt->bindParam(':total', $total);
$stmt->executeQuery([
    ':num1' => 6,
    ':num2' => 7
]);

$total
将存储输出


0
投票

这是工作片段。不需要$sql部分,因为我们使用过程,而不是使用sql语句。

$result = null;
DB::connection('orange')->executeProcedure('OS_USR.OSOPR.p_get_multiplication',
[
    'res' => &$result,
    'a' => 2,
    'b' => 3,
]);
return $result;

请注意,此代码片段使用 yajra/laravel-oci8 与 OCI8 驱动程序的 Oracle 连接。

© www.soinside.com 2019 - 2024. All rights reserved.