Прежде чем спросить пробовал вот так:Автор оригинала: Falc
>>А как вызывать функции?
Точно так же как и процедуры:
Код:begin :res := PAK1.FUN1( :Pin1,...:Pin6, :Pout1,...:Pout6 ); end;
$Pin1='pin1';
$Pin2='pin2';
...
$Pin5='pin5';
$sth = OCIParse ( $con,"begin PAK1.FUN1( Pin1,:Pin2,...:Pin5,:Pout1,Pout2,...,:Pout6);end;" );
#связываем входные параметры
OCIBindByName ( $sth, ":Pin1", $Pin1, 10 );
OCIBindByName ( $sth, ":Pin2", $Pin2, 10 );
...
OCIBindByName ( $sth, ":Pin5", $Pin5, 10 );
#связываем ВЫходные параметры
#не уверен что это нужно
OCIBindByName ( $sth, ":Pout1", $Pout1, 20 );
OCIBindByName ( $sth, ":Pout2", $Pout2, 10 );
...
OCIBindByName ( $sth, ":Pout6", $Pout6, 10 );
OCIExecute ( $sth );
echo $Pout1;
...
echo $Pout6;
Warning: ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-06550: line 1, column 7:
PLS-00221: 'FUN1' is not a procedure or is undefined ORA-06550: line 1, column 7: PL/SQL:
Statement ignored in ...
Переделал на вот так:Автор оригинала: tony2001
>Про :res := не совсем понятно.
Функция возвращает значение.
:res - это placeholder для него.
:= - это операция присваивания.
$Pin1='pin1';
$Pin2='pin2';
...
$Pin5='pin5';
$sth = OCIParse ( $con,"begin :result :=PAK1.FUN1( Pin1,:Pin2,...:Pin5,:Pout1,Pout2,...,:Pout6);end;" );
#связываем входные параметры
OCIBindByName ( $sth, ":Pin1", $Pin1, 10 );
OCIBindByName ( $sth, ":Pin2", $Pin2, 10 );
...
OCIBindByName ( $sth, ":Pin5", $Pin5, 10 );
#связываем ВЫходные параметры
#не уверен что это нужно
OCIBindByName ( $sth, ":Pout1", $Pout1, 20 );
OCIBindByName ( $sth, ":Pout2", $Pout2, 10 );
...
OCIBindByName ( $sth, ":Pout6", $Pout6, 10 );
OCIBindByName ( $sth, ":result", $result, 10 );
OCIExecute ( $sth );
echo "123";
echo $result;
echo $Pout1;
...
echo $Pout6;
Declare
Function test Return Number Is
Begin
Return 123;
End;
Begin
:res := test();
End;