Оракл и входные и выходные параметры.

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
UUU
Сообщения: 310
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

Делаю небольшую выборку из БД Оракл на перле:

declare
B string(250);
BD date;
Language integer;
Status integer;
Param1 string(250);
Param2 string(250);
Param3 string(250);
Param4 string(250);
Param5 string(250);
Res integer;
begin
TipaBazar.PP_TipaProcedure ('', '',B,BD,Language,Status,Param1,Param2,Param3,Param4,Param5,Res);

commit;
dbms_output.put_line(B);
dbms_output.put_line(BD);
dbms_output.put_line(Language);
dbms_output.put_line(Status);
dbms_output.put_line(Param1);
dbms_output.put_line(Param2);
dbms_output.put_line(Param3);
dbms_output.put_line(Param4);
dbms_output.put_line(Param5);
dbms_output.put_line(Res);
end;

далее

$dbh->{RaiseError} = 1;
$dbh->func( 2000, 'dbms_output_enable' );

$csr = $dbh->prepare($st);
$csr->execute;

# retreive the string
@array = $dbh->func( 'dbms_output_get' );

В результате я должен получить массив выходных параметров, т.е. длина массива 10 значений. Но. Я получаю 12. Причем первые 2 - содержат внутренние обращения запроса (оракловые обращения при выполнении процедуры).
Я бы не обратил на это внимание, но данная процедура работала с другой БД и выдавала правильные значения.
В чем собака порыта?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А реально в пул dbms_output пишется сколько строк? (Если из SQLPlus-а запустить)
Я бы не обратил на это внимание, но данная процедура работала с другой БД и выдавала правильные значения.
А не может так быть что процедура PP_TipaProcedure из пекета TipaBazar в этой и другой базе отличается тем, что сама в пул dbms_output две строки пихает. Например, разработчик забыл закомментировать :)
UUU
Сообщения: 310
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

А вот так и получается :-(
Мало того. Делаю вызов из SQL навигатора со своей машины - все ОК, никаких лишних параметров.
Делаю вызов с другой машины - 2 лишних.
Но в лбюбом случае, по своей простоте душевной считал, что из перла получаю только то, что dbms_output.put_line(B); А их выдается больше.
Пока выкрутился - считываю со 2 элемента массива. Но это не есть хорошо. Бум дальше смотреть.
Ответить