【问题标题】:How to call package from php having procedure in oracle using oci drivers?如何使用 oci 驱动程序在 oracle 中调用具有程序的 php 包?
【发布时间】:2011-08-10 16:24:33
【问题描述】:

我正在调用具有使用 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_contract_no = '11-col1-cm';
$p_utilityagencyname='ATM';
$p_appliance_type='BO';
$p_tier_type=1;
$p_brand_code =NULL;
$p_execution_type='brand';

$query="begin process_101.get_brand_model_list(:p_contract_no, :p_utilityagencyname, :p_appliance_type, :p_tier_type, :p_brand_code, :p_execution_type, :r); end;";

@987654329 @
oci_bind_by_name($stid, ":p_contract_no", & $p_contract_no);
oci_bind_by_name($stid, ":p_utilityagencyname", & $p_utilityagencyname);
oci_bind_by_name($stid, ":p_appliance_type", & $p_appliance_type);
oci_bind_by_name($stid, ":p_tier_type", & $p_tier_type);
oci_bind_by_name($stid, ":p_brand_code", & $p_brand_code);
oci_bind_by_name($stid, ":p_execution_type", & $p_execution_type);
oci_bind_by_name($stid, ":r", $r);
oci_execute($stid); 如果有人能解决我的问题,请帮忙。提前谢谢..

【问题讨论】:

标签: php oracle package call


【解决方案1】:

据我所知,对于从过程返回的变量,您必须指定 typemaxlengthoci_bind_by_name()

假设:rOUT 变量,试试:

oci_bind_by_name($stid, ":r", $r, 50, SQLT_CHR);

以下代码适用于从 Oracle 过程(Zend_Db_Adapter_Oracle 版本)返回值:

$statement = $db->prepare('BEGIN oracle_procedure(:result); END;');
$statement->bindParam('result', $result, SQLT_CHR, 12);
$statement->execute();
echo $result;

【讨论】:

  • 感谢您的信息,但我正在使用具有自定义类型“表”的程序的程序包
  • 数据类型(对象数组)存在问题。 php 不支持对象数组。所以这个改变需要在 oracle 端完成。来自 oracle 的响应被转换为带有记录分隔符的字符串,我的问题得到了解决。
猜你喜欢
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 2017-04-26
  • 2016-12-06
  • 1970-01-01
  • 2010-11-05
  • 2010-12-23
  • 1970-01-01
相关资源
最近更新 更多