Вниз
Скачать: CL | DM;

Динамический SQL в Oracle   Найти похожие ветки 

← →
Val ©   (2002-08-08 13:32) [0]

Коллеги, кто занимался subj поделитесь информацией для поиска синтаксиса в документации. Какие-нибудь команды, зацепки...
Заранее благодарен.


← →
fnatali ©   (2002-08-08 13:35) [1]

http://mab.h1.ru/OTHER/dplsql.html


← →
Val ©   (2002-08-08 13:54) [2]

спасибо


← →
Val ©   (2002-08-08 14:34) [3]

Хм, теперь задам нормальный вопрос :)
Ситуация: в хран. процедуре в зависимости от вх.параметра необходимо пройтись по разным курсорам, но выполнить одни и те же действия, как это сделать?
как увернуться от такого?

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;


← →
Johnmen ©   (2002-08-08 14:56) [4]

В ХП видимо так и придется делать...
Вот если это загнать в пакет, то для однотипных действий можно сделать процедурку...


← →
Val ©   (2002-08-08 15:03) [5]

это хп внутри пакета.
проблемка в том, что если создавать для этих действий процедуру, то туда нужно передавать rec.id..., a тип rec будет разным.


← →
Johnmen ©   (2002-08-08 15:09) [6]

А какая разница, что тип разный, ведь передавать, наверное, будешь значения полей (однотипных) ?


← →
Val ©   (2002-08-08 15:10) [7]

так не компилится, выдает ошибку о несоответствии количества параметров


← →
Johnmen ©   (2002-08-08 15:14) [8]

Как выглядит вызов и реализация упомянутой процедуры ?


← →
Val ©   (2002-08-08 15:21) [9]

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;




← →
Val ©   (2002-08-08 15:38) [10]

сорри, тут описался в предыдущем посте:
procedure local_proc(rec obj2% ROWTYPE)


← →
Johnmen ©   (2002-08-08 15:49) [11]

Может имеет смысл что-то вроде этого :

вызов
local_proc(rec.id,rec.name);

реализация
procedure local_proc(id integer,name varchar2(..))
as
begin
dosomething(id,name);--действий много
end;


← →
Val ©   (2002-08-08 16:04) [12]

да, думаю так сработало бы, но этих параметров уйма целая, поэтому я и хотел с типами курсора как-то хитро подмутить, да видно это единственный обходной путь.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.009 c
4-96009
Dimrix
2002-06-24 21:57
2002.08.29
Проблема с отсылкой сообщений Winamp у при помощи PostMessages


1-95876
w_devil
2002-08-17 16:38
2002.08.29
как отловить WM_QUIT ?


6-95936
RedArc
2002-06-19 17:36
2002.08.29
Почтовый робот


3-95646
masanovetc
2002-08-06 11:40
2002.08.29
Как сделать запрос при помощи временных таблиц?


1-95806
ErmSergey
2002-08-20 09:29
2002.08.29
Определение позиции символа над которым находится указатель мыши




   Наверх