(PHP+Oracle) Как вызвать из PHP хранимую фунцию Oracle?

Simara83
Дата: 20.07.2006 18:47:14
Как вызвать из PHP хранимую фунцию Oracle?
hell
Дата: 20.07.2006 20:22:46
Simara83
Как вызвать из PHP хранимую фунцию Oracle?
\


select my_super_func(:param_1, :param_2, ..., :param_x) from dual;
sqllex
Дата: 25.07.2006 17:37:52
А справку лень открыть, там даже пример есть
<?php
// by webmaster at remoterealty dot com
$sth = OCIParse($dbh, "begin sp_newaddress( :address_id, '$firstname',
'$lastname', '$company', '$address1', '$address2', '$city', '$state',
'$postalcode', '$country', :error_code );end;");

// This calls stored procedure sp_newaddress, with :address_id being an
// in/out variable and :error_code being an out variable. 
// Then you do the binding:

   OCIBindByName($sth, ":address_id", $addr_id, 10);
   OCIBindByName($sth, ":error_code", $errorcode, 10);
   OCIExecute($sth);

?>
PalR
Дата: 18.07.2007 08:49:01
Что то вариант из справки не работает. Хранимая процедура лежит в пакете. Вызываю я её с именем пакета, тоесть:
$sth = OCIParse($dbh "begin пакет.процедура( :парам1:парам2парам3:парам_вых );end;");

потом связываю
OCIBindByName($sth ":парам1" $п1 10);
OCIBindByName($sth ":парам2" $п2 10);
OCIBindByName($sth ":парам3" $п3 10);
OCIBindByName($sth ":парам_вых" $вых 10);
OCIExecute($sth);

Парам1-парам3 - входные данные.
Парам_вых - это выходное значение процедуры. Мне нужно его присвоить некой переменной, допустим $вых.
Вообщем всё это не работает. Ошибка даже не ораклёвая. Если нужно приведу полностью текст.
Ещё скажите что за значение "10".
PalR
Дата: 18.07.2007 08:51:47
Что то вариант из справки не работает. Хранимая процедура лежит в пакете. Вызываю я её с именем пакета, тоесть:
$sth = OCIParse($dbh "begin пакет.процедура( :парам1:парам2парам3:парам_вых );end;");

потом связываю
OCIBindByName($sth ":парам1" $п1 10);
OCIBindByName($sth ":парам2" $п2 10);
OCIBindByName($sth ":парам3" $п3 10);
OCIBindByName($sth ":парам_вых" $вых 10);
OCIExecute($sth);

Парам1-парам3 - входные данные.
Парам_вых - это выходное значение процедуры. Мне нужно его присвоить некой переменной, допустим $вых.
Вообщем всё это не работает. Ошибка даже не ораклёвая. Если нужно приведу полностью текст.
Ещё скажите что за значение "10".
PalR
Дата: 18.07.2007 08:56:01
Что то вариант из справки не работает. Хранимая процедура лежит в пакете. Вызываю я её с именем пакета, тоесть:

$sth = OCIParse($dbh, "begin пакет.процедура( :парам1,:парам2,парам3,:парам_вых );end;");

потом связываю

OCIBindByName($sth, ":парам1", $п1, 10);
OCIBindByName($sth, ":парам2", $п2, 10);
OCIBindByName($sth, ":парам3", $п3, 10);
OCIBindByName($sth, ":парам_вых", $вых, 10);
OCIExecute($sth);

Парам1-парам3 - входные данные.
Парам_вых - это выходное значение процедуры. Мне нужно его присвоить некой переменной, допустим $вых.
Вообщем всё это не работает. Ошибка даже не ораклёвая. Если нужно приведу полностью текст.
Ещё скажите что за значение "10".
Зы. забыл как код выделить
sqllex
Дата: 19.07.2007 12:48:39
PalR
Что то вариант из справки не работает. Хранимая процедура лежит в пакете. Вызываю я её с именем пакета, тоесть:

Приведите полный код. Код ХП тожене помешает.

PalR

Ещё скажите что за значение "10".

Опять же - в справке по функции OCIBindByName есть. Это максимальная длина передаваемых данных.

ЗЫ
Почитайте справку по oci_bind_by_name, там есть примеры. Может быть у вас используются абстрактные типы данных. Тогда нужно немного по другому oci_bind_by_name вызывать.
Steel007
Дата: 19.07.2007 16:16:29
А если в Оракловой функции используется DML оператор, то функция не выполнится, будет ошибка ORA-14551 cannot perform a DML operation inside a query
, как быть в этом случае?
PalR
Дата: 20.07.2007 19:09:09
Всё разобрался. Ошибка была у меня. Всем спасибо.