2011-04-21 52 views
1

我打算使用oci驅動程序調用oracle包。 我正在誤差作爲如何從使用oci驅動程序的oracle在oracle中調用程序包?

警告:oci_execute()[function.oci-執行]:ORA-06550:第1行,第7列:PLS-00306:錯誤數量或類型的呼叫參數「GET_BRAND_MODEL_LIST 'ORA-06550:第1行,第7列:PL/SQL:語句忽略在/opt/lampp/htdocs/call.php上線26

所有參數是正確的。 $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;";

$stid = oci_parse($conn, $query);
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);
請幫助,如果任何人有解決我的問題。在此先感謝..

+1

如何定義的過程,具體地,參數定義是什麼? – DCookie 2011-04-22 02:24:28

+0

[Oracle存儲過程調用由PhP]可能重複(http://stackoverflow.com/questions/3211652/oracle-stored-procedure-call-by-php) – demongolem 2013-08-29 19:19:40

回答

0

據我記得你必須指定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; 
+0

感謝您的信息,但我正在與包有自定義類型「表」的過程 – Manoj 2011-04-22 19:54:34

+0

數據類型(對象數組)存在問題。 PHP不支持數組對象。所以這個改變需要在oracle端完成。來自oracle的響應被轉換爲帶有記錄分隔符的字符串,並且問題得到解決。 – Manoj 2011-07-21 05:26:05

相關問題