![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический SQL в Oracle [D5, Oracle]
Val © (2002-08-08 13:32:00)Коллеги, кто занимался subj поделитесь информацией для поиска синтаксиса в документации. Какие-нибудь команды, зацепки...
Заранее благодарен.
Val (2002-08-08 16:04:00) [1]да, думаю так сработало бы, но этих параметров уйма целая, поэтому я и хотел с типами курсора как-то хитро подмутить, да видно это единственный обходной путь.
Johnmen (2002-08-08 15:49:00) [2]Может имеет смысл что-то вроде этого :
вызов
local_proc(rec.id,rec.name);
реализация
procedure local_proc(id integer,name varchar2(..))
as
begin
dosomething(id,name);--действий много
end;
Val (2002-08-08 15:38:00) [3]сорри, тут описался в предыдущем посте:
procedure local_proc(rec obj2% ROWTYPE)
Val (2002-08-08 15:21:00) [4]obj2 содержит все поля obj1 и имеет дополнительные
Procedure MyProc(pIn number :=0)
as
procedure local_proc(rec obj2%TYPE)
as
begin
dosomething(rec.id,rec.name);--действий много
end;
begin
if pIn = 0 then
for rec in (select * from obj1) loop
local_proc(rec);
end loop;
elsif pIn = 1 then
for rec in (select * from obj2) loop
local_proc(rec);
end loop;
end if;
end;
Johnmen (2002-08-08 15:14:00) [5]Как выглядит вызов и реализация упомянутой процедуры ?
Val (2002-08-08 15:10:00) [6]так не компилится, выдает ошибку о несоответствии количества параметров
Johnmen (2002-08-08 15:09:00) [7]А какая разница, что тип разный, ведь передавать, наверное, будешь значения полей (однотипных) ?
Val (2002-08-08 15:03:00) [8]это хп внутри пакета.
проблемка в том, что если создавать для этих действий процедуру, то туда нужно передавать rec.id..., a тип rec будет разным.
Johnmen (2002-08-08 14:56:00) [9]В ХП видимо так и придется делать...
Вот если это загнать в пакет, то для однотипных действий можно сделать процедурку...
Val (2002-08-08 14:34:00) [10]Хм, теперь задам нормальный вопрос :)
Ситуация: в хран. процедуре в зависимости от вх.параметра необходимо пройтись по разным курсорам, но выполнить одни и те же действия, как это сделать?
как увернуться от такого?
Procedure MyProc(pIn number :=0)
as
begin
if pIn = 0 then
for rec in (select * from obj1) loop
dosomething(rec.id,rec.name);--действий много
end loop;
elsif pIn = 1 then
for rec in (select * from obj2) loop
dosomething(rec.id,rec.name);
end loop;
end if;
end;
Val (2002-08-08 13:54:00) [11]спасибо
fnatali (2002-08-08 13:35:00) [12]http://mab.h1.ru/OTHER/dplsql.html