php - 如何使用 PHP 从 Oracle 存储函数中获取 OUT 参数作为集合
问题描述
我从所有者那里得到了 Oracle 存储函数(我没有编写函数),看起来像这样
FUNCTION get_customer_data
(
iref_no_list IN t_param_tab,
ocust_data_list OUT NOCOPY t_customer_data_tab,
oerrmsg OUT VARCHAR2
) RETURN NUMBER;
CREATE OR REPLACE TYPE T_PARAM_TAB force IS TABLE OF t_param_obj;
CREATE OR REPLACE TYPE T_PARAM_OBJ FORCE AS OBJECT
(
par_name VARCHAR2(30), /*Parameter name*/
par_value VARCHAR2(50), /*Parameter value*/
MEMBER FUNCTION to_string RETURN VARCHAR2
);
CREATE OR REPLACE TYPE T_CUSTOMER_DATA_TAB IS TABLE OF t_customer_data_obj;
CREATE OR REPLACE TYPE T_CUSTOMER_DATA_OBJ FORCE AS OBJECT
(
full_name VARCHAR2(360 CHAR),
first_name VARCHAR2(100 CHAR),
last_name VARCHAR2(100 CHAR),
identity_number VARCHAR2(20 CHAR),
email VARCHAR2(255 CHAR),
phone_number VARCHAR2(20 CHAR),
MEMBER FUNCTION to_string RETURN VARCHAR2
);
PHP代码看起来像这样
$connection = oci_connect("username", "password", "connect string");
$sql = "DECLARE
iref_no_list t_param_tab := t_param_tab(t_param_obj('CA_REF_NO', '1111111111'));
BEGIN
:rc := get_customer_data(iref_no_list => iref_no_list,
ocust_data_list => :output,
oerrmsg => :message);
END;";
$stmt = oci_parse($connection, $sql);
$output = oci_new_collection($connection, "T_CUSTOMER_DATA_TAB");
oci_bind_by_name($stmt, ":output", $output, -1, OCI_B_NTY);
oci_bind_by_name($stmt, ":message", $errorMessage, 4000, SQLT_CHR);
oci_bind_by_name($stmt, ":rc", $resultNumber);
oci_execute($stmt, OCI_DEFAULT);
问题是,我就是无法打印出该集合。它返回消息和返回值,但 collection 只返回collection => oci8 collection resource。
我试过了
$count = $output->size();
for ($i=0; $i<=$count; $i++) {
$outputArray[] = $output->getElem($i);
}
但它只是返回false。
你知道有什么解决办法吗?谢谢你。
解决方案
推荐阅读
- ruby-on-rails - 无法加载此类文件 -- gems/bundle-2.1.4/exe/bundle?
- server - 使用 EasyModbusTCP lib 在同一台电脑上控制多个 Modbus 服务器
- javascript - 如何在正则表达式中捕获可选组?
- css - 为什么 CSS 中的 ":is()" 选择器似乎不起作用?
- ubuntu - Microk8s 节点未准备好 - InvalidDiskCapacity
- python - 如何使用 Selenium 和 Python 在 codeur.com 登录页面上找到并单击提交按钮
- python - 关键权限
- c# - 尝试发布 asp.net 项目时出错
- c# - 如何使用 .NET Core 在 Azure Function V3 中使用 IOptions 模式
- unit-testing - Nestjs中不导入手动mock