cyborg
Новичок
Вызов процедуры, данные типа RECORD
Есть процедура в оракле, которая возвращает ответ типа BOOLEAN и плюс заполняет выходную переменную типом
вот рабочий код SQL-скрипта
пытаюсь сделать то же самое на пхп, но что-то делаю не так, ругается ошибкой
код php-скрипта
Есть процедура в оракле, которая возвращает ответ типа BOOLEAN и плюс заполняет выходную переменную типом
Код:
TYPE TSetup IS RECORD (
lng_read NUMBER:=null,
lng_send NUMBER:=null,
notify_text NUMBER:=null,
disabled NUMBER:=null
);
PHP:
DECLARE
vResult VARCHAR2(10000);
vSetup SETUP_BP.SetupTyp;
vFound BOOLEAN;
BEGIN
vFound:=SETUP_BP.FOUND_SETUP_NEW(:from_addr,vSetup);
IF vSetup.disabled=1 THEN vResult:='Запрет включен.';
ELSIF vSetup.disabled=2 THEN vResult:='Запрет WEB включен.';
ELSIF vSetup.disabled=3 THEN vResult:='Запрет e-mail включен.';
ELSE vResult:='Запрет отключен.';
END IF;
vResult:=vResult||CHR(13)||CHR(10)||'6040-откл. запрет'||CHR(13)||CHR(10)||'6041-вкл. запрет';
:Result:=vResult;
END;
Код:
ORA-06550: line 1, column 15: PLS-00306: wrong number or types of arguments in call to 'FOUND_SETUP_NEW' ORA-06550: line 1, column 7: PL/SQL: Statement ignored
begin :res := SETUP_BP.FOUND_SETUP_NEW(:from_addr,:vSetup); end;
^
код php-скрипта
PHP:
$from_addr = 'my_addr';
$vSetup = '';
$res = '';
$query = "begin :res := SETUP_BP.FOUND_SETUP_NEW(:from_addr,:vSetup); end;";
$stmt = OCIParse($conn,$query);
OCIBindByName($stmt, ":from_addr", $from_addr);
OCIBindByName($stmt, ":vSetup", $vSetup);
OCIBindByName($stmt, ":res", $res);
$rslt = OCIExecute($stmt,OCI_DEFAULT);
if ($rslt == false){
$e = ocierror($stmt); // For oci_execute errors pass the statementhandle
echo htmlentities($e['message']);
echo "<pre>";
echo htmlentities($e['sqltext']);
printf("\n%".($e['offset']+1)."s", "^");
echo "</pre>";
exit;
}
var_dump($vSetup);