为了账号安全,请及时绑定邮箱和手机立即绑定

PHP - PL/SQL:如何将数组(作为 Oracle 过程的 OUT 参数)读入 PHP

PHP - PL/SQL:如何将数组(作为 Oracle 过程的 OUT 参数)读入 PHP

PHP
三国纷争 2022-12-23 14:43:12
我的 Oracle 数据库中有一个过程,其中有一个数组作为输出参数。在此过程中,我将所有球队及其积分放入一个数组中。create or replace package pck_tournamentas  type trranking  is record (            position  number       ,    team   VARCHAR2(20)       ,    points  number   );  type taranking is table of trranking;  procedure retrieve_ranking (oparray  out taranking);end pck_tournament;但是当我尝试用 PHP 调用这个过程时,我总是会得到这样的错误:PLS-00306:调用“RETRIEVE_RANKING”时参数的数量或类型错误这是我的 PHP 代码的一部分:    $out_arr = array();       $stmt = oci_parse($conn, "BEGIN pck_tournament.retrieve_ranking(:taranking); END;");    oci_bind_array_by_name($stmt,":taranking", $out_arr, 10000, 10000, SQLT_CHR );    oci_execute($stmt); 如果我将 OUT 参数更改为 VARCHAR2 以进行测试,我就能够读取结果。但如果它是一个数组,我就无法让它工作。所以问题一定是我使用了错误类型的参数来存储我的 OUT 参数?我搜索了很多网站,但仍然不知道如何进行这项工作。
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

你在 oracle 中拥有的不仅仅是一个数组,它是一个记录数组......所以 PHP 中的标准数组将无法处理它。

根据 Stack Overflow 上的以下问题,您需要告诉 PHP Type 的外观

PHP:将变量绑定到表类型输出参数

所以使用下面的(替换你的类型和模式)

$table_output = oci_new_collection($conn,'some_table_type','schema');

另一个问题也有一个很好的资源链接,可以找到更多关于这个的信息。

正如@MT0 所指出的,您还必须更改定义类型的方式。您可以按照建议将其更改为 object 或将其保留为记录,但主要更改是将声明移到包之外。

如果它们只在包中定义,PHP 将看不到它们。


查看完整回答
反对 回复 2022-12-23
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信