Как вызвать пакет из php с процедурой в oracle, используя драйверы oci? - PullRequest
1 голос
/ 22 апреля 2011

Я вызываю пакет oracle с процедурой, использующей драйверы oci. Я получаю ошибку как

Предупреждение: oci_execute () [function.oci-execute]: 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 Ответ

0 голосов
/ 22 апреля 2011

Насколько я помню, вы должны указать type и maxlength до oci_bind_by_name() для переменных, возвращаемых из процедуры.

Предполагая, что :r является переменной OUT, попробуйте:

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;
...