如何在oracle中使用oci驱动程序从php调用程序包?

如何在oracle中使用oci驱动程序从php调用程序包?,php,oracle,package,call,Php,Oracle,Package,Call,我正在调用使用oci驱动程序的oracle程序包。 我得到的错误是 警告:oci_execute[function.oci execute]:ORA-06550:第1行第7列:PLS-00306:调用“GET_BRAND_MODEL_LIST”时参数的数量或类型错误ORA-06550:第1行第7列:PL/SQL:在第26行的/opt/lampp/htdocs/call.php中忽略了语句 所有参数都是正确的。 $p_合同编号='11-col1-cm'; $p_utilityagencyname=

我正在调用使用oci驱动程序的oracle程序包。 我得到的错误是

警告:oci_execute[function.oci execute]:ORA-06550:第1行第7列:PLS-00306:调用“GET_BRAND_MODEL_LIST”时参数的数量或类型错误ORA-06550:第1行第7列:PL/SQL:在第26行的/opt/lampp/htdocs/call.php中忽略了语句

所有参数都是正确的。 $p_合同编号='11-col1-cm'; $p_utilityagencyname='ATM'; $p_appliance_type='BO'; $p_tier_type=1; $p_品牌_代码=空; $p_执行_type='brand'; $query=开始处理\u 101.获取\u品牌\u型号\u列表:p\u合同号,:p\u实用程序代理名称,:p\u设备\u类型,:p\u层\u类型,:p\u品牌\u代码,:p\u执行\u类型,:r;终止 $stid=oci_parse$conn$query; oci_绑定名称$stid,:p_合同号和$p_合同号; oci_bind_by_name$stid,:p_utilityagencyname和$p_utilityagencyname; oci_按名称$stid绑定:$p_设备类型和$p_设备类型; oci_按名称绑定$stid,:p_tier_类型和$p_tier_类型; oci_按名称绑定$stid、:p_品牌代码和$p_品牌代码; oci_按名称$stid绑定:$p_执行类型和$p_执行类型; oci\u按名称绑定\u$stid,:r,$r; oci_执行$stid;
如果有人能解决我的问题,请帮忙。提前感谢。

据我所知,您必须为过程返回的变量指定type和maxlength to

假设:r是OUT变量,请尝试:

oci_bind_by_name($stid, ":r", $r, 50, SQLT_CHR);
以下代码用于从Oracle过程版本返回值:


过程是如何定义的,具体来说,参数定义是什么?可能是重复的,谢谢您提供的信息,但我正在使用带有自定义类型表的程序包。对象的数据类型数组存在问题。php不支持对象数组。因此,这项更改需要在oracle端完成。来自oracle的响应被转换为带有记录分隔符的字符串,我的问题得到解决。
$statement = $db->prepare('BEGIN oracle_procedure(:result); END;');
$statement->bindParam('result', $result, SQLT_CHR, 12);
$statement->execute();
echo $result;