kursory Oracle - lamerskie pytanie
ZepZoSo - 23-02-2007 00:01
kursory Oracle - lamerskie pytanie
Jest: cursor a is .... cursor b is ... cursor c is ....
if warunek then .... elsif .... .... else ..... end if;
for cos in ?? loop dużo instrukcji ...... ..... ..... end loop;
W ifie dowiaduję się, z którego kursora trzeba będzie korzystać. Co się podstawia za znaki zapytania, by użyć jednego z kilku kursorów, z jednym ciałem fora? Za wszelkie info dzięki serdeczne!
-- ZepZoSo
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 23-02-2007 00:01
Dnia Thu, 22 Feb 2007 19:44:32 +0100, "ZepZoSo" <zepzoso@gazeta.pl> wklepał(-a):
>Jest: >cursor a is .... >cursor b is ... >cursor c is .... > >if warunek then >... >elsif .... >... >else >.... >end if; > > >for cos in ?? loop >dużo instrukcji >..... >.... >.... >end loop; > >W ifie dowiaduję się, z którego kursora trzeba będzie korzystać. >Co się podstawia za znaki zapytania, by użyć jednego z kilku kursorów, z >jednym ciałem fora? >Za wszelkie info dzięki serdeczne!
Jeśli każdy z kursorów zwraca takie same kolumny:
DECLARE tab_a dbms_sql.number_table; tab_b dbms_sql.number_table; tab_c dbms_sql.varchar2_table; x number; BEGIN case warunek when war_a then begin open a; fetch a bulk collect into tab_a, tab_b, tab_c; close a; -- jeśli rekordów jest dużo, trzeba użyć opcji limit + dodatkowa pętla end; when war_b then begin open b; fetch b bulk collect into tab_a, tab_b, tab_c; close b; end; ... else null; -- jakiś tam wyjątek end case;
for k in tab_a.first .. tab_a.last loop x := tab_a(k) + tab_b(k); ..... end loop;
END; -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
KM - 23-02-2007 00:01
Użytkownik "ZepZoSo" <zepzoso@gazeta.pl> napisał w wiadomości news:erko99$frm$1@inews.gazeta.pl... > > W ifie dowiaduję się, z którego kursora trzeba będzie korzystać. > Co się podstawia za znaki zapytania, by użyć jednego z kilku kursorów, z > jednym ciałem fora?
Witam, Nie jest to może odpowiedź w 100% zgodna z Twoimi założeniami, ale może przyda się przy rozwiązaniu problemu:
1. Jeśli definicje kursorów niewiele się różnią to można zadeklarować tylko jeden kursor sparametryzowany. Potem można przekazać parametry przy otwieraniu kursora funkcją OPEN jak i przy otwieraniu niejawnie w pętli FOR
np. FOR rec_csr IN kursor(parametr1, parametr2) LOOP ...
2. Inne rozwiązanie to skorzystanie ze wskaźników (REF) do kursorów. Można zdefiniować zmienną typu REF CURSOR i dopiero później otworzyć odpowiedni kursor w warunkach (IF).
declare rc_type ref cursor; kursor_rfc rc_type; .... begin if (warunek 1) then open kursor_rfc for select x from y where z; ... else open kursor_rfc for select a from b where c; ... end if;
loop
...
fetch kursor_rfc into .... ; exit when kursor_rfc%NOTFOUND;
...
end loop; close kursor_rfc;
end; /
pozdrawiam Krzysztof Maciak
ZepZoSo - 23-02-2007 00:01
KM brzdąka pod nosem: > 2. Inne rozwiązanie to skorzystanie ze wskaźników (REF) do kursorów. > Można zdefiniować zmienną typu REF CURSOR i dopiero później otworzyć > odpowiedni kursor w warunkach (IF).
Akurat o tym czytałem i pomyślałem, że jest to jakaś opcja. Spróbuję przetestować.
Dzięki za odzew.
-- ZepZoSo
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
Oracle 19g +Insert +Insert +Insert...
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
zanotowane.pldoc.pisz.plpdf.pisz.plshanti.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|