[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
AP - 11-05-2007 12:32
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
Witam
Jako że brakuje mi już wiedzy i koncepcji, jak to zrobić, proszę Was o pomoc...
Sytuacja jest taka: mam zapytanie, które zwraca jedną kolumnę. Zdefiniowałem kursor. Następnie próbuję odczytać zawartość tego kursora i zapisać PARTIE zwróconych danych (np. po 10tys. wierszy) do kolejnych plików tekstowych:
declare licz_rek number :=0; pr_file_log utl_file.file_type; rek_start number :=1; rek_end number :=1; nr_pliku number :=10; i number :=1; CURSOR cu_dane IS select [...] as cu_wiersz from [..]; begin rek_start := 1; rek_start := 10; i := 1; for nr_rek in cu_dane loop pr_file_log:=utl_file.fopen('c:\temp','dane'||nr_p liku||'.txt','W'); while ((i>=rek_start) and (i<=rek_end)) loop i := i+1; utl_file.put_line(pr_file_log,nr_rek.cu_wiersz); end loop; rek_start := rek_end + 1; rek_end := rek_end + 10; nr_pliku := nr_pliku + 1; utl_file.fclose(pr_file_log); end loop; end; /
W takiej postaci w ogóle nie "wchodzi" w pętlę while, dopiero gdy na sztywno zdefiniuję warunek while ((i>=1) and (i<=10)), to zaczyna się coś dziać, tzn. pojawiają się dane, ale pętla while wykonuje się określoną ilość razy dla każdego rekordu z kursora. Nie wiem, jak to inaczej poukładać, żeby działało dobrze.
Krótko mówiąc, celem jest zapis określonej liczności paczkami pewnej ilości zwróconych danych do kolejno numerowanych plików.
Na zaś - dzięki :)
Pozdrawiam, AP
PS. Gdyby to miało znaczenie, to pracuję na wersji 8.1.7.
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 11-05-2007 12:32
=?ISO-8859-2?Q?Re:_[Oracle_PL/SQL]_Cursor_i_zapis_rekord=F3w_do_kolejnych?==?ISO-8859-2?Q?_plik=F3w?=
Dnia Tue, 24 Apr 2007 22:29:21 +0200, AP <ap@op.pl> wklepał(-a):
>Witam > >Jako że brakuje mi już wiedzy i koncepcji, jak to zrobić, proszę Was o >pomoc... > >Sytuacja jest taka: mam zapytanie, które zwraca jedną kolumnę. >Zdefiniowałem kursor. Następnie próbuję odczytać zawartość tego kursora >i zapisać PARTIE zwróconych danych (np. po 10tys. wierszy) do kolejnych >plików tekstowych:
Po pierwsze - nie przetwarzaj rekord po rekordzie bo to niewydajne. Tutaj news:f0llh0.2lk.1@slaszysz.poczta.onet.pl masz przykład jak przyspieszyć wczytywanie danych. Wczytaj te dane do tablicy raz i stamtąd dopiero zapisuj do pliku.
Rozwiązanie trywialne - ustaw LIMIT na żądaną wartość i po każdym wczytaniu danych przez FETCH zapisuj dane do pliku. Rozwiązanie elastyczne - LIMIT niech będzie stały, ale dodaj warunki, które będą zmieniać plik po przekroczeniu określonej liczby rekordów. -- 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
Lucyna Witkowska - 11-05-2007 12:32
AP <ap@op.pl> napisał: > rek_start := 1; > rek_start := 10;
Jak moze wchodzic w petle, jesli rek_start=rek_end=10?
Pozdrowienia, LW
AP - 11-05-2007 12:32
Lucyna Witkowska pisze: > AP <ap@op.pl> napisał: >> rek_start := 1; >> rek_start := 10; > > Jak moze wchodzic w petle, jesli rek_start=rek_end=10? > > Pozdrowienia, > LW
No tak, wstyd jak nie wiem... Chyba za długo i zbyt późno nad tym siedziałem.
Dziękuję. AP
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle 19g +Insert +Insert +Insert...
MSSQL Express czy Oracle Express
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
[Oracle, Toad] Zaladowanie obiektu w TOAD
[Oracle][Reports30] 10G nie dziala razem z Reports3.0
klient oracle (zmiana domyslna klienta oracla)
[oracle] [xml] XML na bazie istniejacej struktury ?
[Oracle] W jaki sposób skopiować całą zawartość schemy jednego użytkownika do nowo utworzonego użytkownika?
klient Oracle 10g SE a Windows 98 SE
Oracle Standard Edition One - czym sie rozni od wersji standard iexpress?
zanotowane.pldoc.pisz.plpdf.pisz.plred-hacjenda.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 |
|