ďťż
 
kursory Oracle - lamerskie pytanie ďťż
 
kursory Oracle - lamerskie pytanie
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shanti.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com