0RA-01008 (очень хочется спать)

Zergling
Дата: 07.11.2008 21:26:48
Здравствуйте,

Oracle9i Enterprise Edition Release 9.2.0.7.0
Forms 6.0.8.26.0

Есть хранимый пакет с функцией
function GetInAmounts
(
iAcId in integer,
dDate in date,
iType in integer default 1
) return tt_amounts_data pipelined is


Отладочный вызов в форме
select amount,amount_equ into am, equ from table(victory.dwp_ac_amtrn4o9.GetInAmounts(109276, to_date('01.11.2008','dd.mm.yyyy') ,2));
отрабатывает на ура

А рабочий вариант
select amount,amount_equ into am, equ from table(victory.dwp_ac_amtrn4o9.GetInAmounts(to_number(ac.ac_id),d.d_id,2));
валится с ошибкой 0RA-01008

ac.ac_id - varchar2
d.id - date

Очень хочется спать. Помогите пожалуйста.
lobzik_
Дата: 07.11.2008 21:58:02
А объекты ac и d существуют? И вних есть поля ac_id и d_id?
Zergling
Дата: 07.11.2008 22:09:40
Спасибо за внимание к моему горю.

Разумеется

for d in (select distinct d_id from ........) loop

for ac in (select ac_id, ......) loop

Здесь вызовы. Причем для отладки я использовал как раз значения полученные запросами.

end loop;

end loop;
dmidek
Дата: 07.11.2008 22:16:09
ORA-01008 - не все переменные привязаны.

Неплохо бы взглянуть на функцию...
Zergling
Дата: 07.11.2008 22:20:47
function GetInAmounts
(
iAcId in integer,
dDate in date,
iType in integer default 1
) return tt_amounts_data pipelined is
dStartDate date := case iType
when 1 then to_date('31-12-2002','dd-mm-yyyy')
when 2 then trunc(dDate,'Q')-1
when 3 then add_months(trunc(dDate,'Q')-1,-3)
end;
result tr_amounts_data;
cursor cr is
select
a.ac_id,
a.amount,
a.amount_equ
from ......
rc cr%RowType;
begin
open cr;
loop
fetch cr into rc;
exit when cr%notfound;
result := tr_amounts_data
(
rc.ac_id,
rc.amount,
rc.amount_equ
);
pipe row (result);
end loop;
close cr;
return;

end GetInAmounts;
SimonInBlues
Дата: 09.11.2008 19:44:25
Если пишешь в формсе 6, то она некорректно работает с коллекциями. В частности, pipelined функции, принимающие параметры, можно корректно вызвать только, передав в них константы. Попробуй переписать функцию так, чтобы она не имела входных параметров, а вместо них использовала переменные пакета, инициализируемые предварительно перед обращением к этой функции. Можно дополнительно построить вьюху на основе твоей функции.
Zergling
Дата: 10.11.2008 08:43:03
SimonInBlues, спасибо. С пакетом попробую ну и танцы с бубном попляшу в этом направлении.