php - PHP - PL/SQL:如何将数组(作为 Oracle 过程的 OUT 参数)读入 PHP
问题描述
我的 Oracle DB 中有一个过程,其中一个数组作为输出参数。在此过程中,我将所有团队及其分数放入一个数组中。
创建或替换包 pck_tournament 作为 类型排序是记录( 职位编号 , 团队 VARCHAR2(20) , 点数 ); 类型 taranking 是 trranking 表; 过程retrieve_ranking(oparray out taranking); 结束 pck_tournament;
但是当我尝试用 PHP 调用这个过程时,我总是会收到这样的错误:
PLS-00306:调用“RETRIEVE_RANKING”时参数的数量或类型错误
这是我的 PHP 代码的一部分:
$out_arr = 数组(); $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 参数?
我搜索了很多网站,但仍然不知道如何使这项工作。
解决方案
你在 oracle 中拥有的不仅仅是一个数组,它是一个记录数组......所以 PHP 中的标准数组将无法处理它。
根据 Stack Overflow 上的以下问题,您需要告诉 PHP 类型将是什么样子
所以使用下面的(替换你的类型和架构)
$table_output = oci_new_collection($conn,'some_table_type','schema');
另一个问题也有一个很好的资源链接,用于查找有关此的更多信息。
正如@MT0 所指出的,您还必须更改定义类型的方式。您可以按照建议将其更改为对象或将其保留为记录,但主要更改是将声明移到您的包之外。
如果仅在包中定义它们,PHP 将无法看到它们。
推荐阅读
- tableau-api - 如何从服务器中删除已发布的数据源,使其在连接到服务器时不显示?
- apache - 如果通过 htaccess 具有特定路径,请不要重定向到 www
- json - 将简单连接的 json 转换为 shell 变量
- vue.js - 为什么 vuejs npm run build modern 不构建遗留文件
- ios - TextColor 属性不会更改 MDCOutlinedTextField 的leadingAssistiveLabel
- c++ - C++ STL、Eigen 或 Boost 是否具有反双曲正割 (asech) 函数?
- azure - 首选单租户时需要多租户的 Azure 机器人应用注册
- python - 从 DataFrame 列中提取字符串数据以分隔列
- .net-core - 禁用某些端点的 swagger try-it-out(不管提交方法)
- linux - 如何使用快捷键在 Linux 上的 Visual Studio Code 中调整窗格的宽度?