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

问题描述 投票:1回答:1

我在Oracle DB中有一个过程,其中一个数组作为输出参数。在此过程中,我将所有团队及其得分放入一个数组。

创建或替换包pck_tournament如记录类型是记录(职位编号,小组VARCHAR2(20),点数);分类类型是分类表;程序retrieve_ranking(oparray out taranking);结束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参数?

我已经搜索了很多网站,但仍然不知道如何进行这项工作。

php oracle plsql
1个回答
1
投票

您在oracle中拥有的不只是一个数组,而是一个记录数组...。因此,PHP中的标准数组将无法处理它。

按照下面关于堆栈溢出的问题,您需要告诉PHP类型是什么样子

PHP: Binding variable to table type output parameter

因此,请使用以下内容(替换您的类型和架构)

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

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

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

如果仅在软件包中定义它们,PHP将无法看到它们。

热门问题
推荐问题
最新问题