[ORACLE w pl/sql] limit, multi-insert
smerf - 11-05-2007 12:32
[ORACLE w pl/sql] limit, multi-insert
Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na bazie Oraclowej W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w PL/SQLu nie dziala LIMIT select id, data from tabela order by data desc limit 1
Drugi problem lezy przy wstawianiu w petli kilku rekordow. Zamiast wrzucania każdego wiersza osobno, jak ponizej: insert into tabela(imie, nazwisko, numer) values('Mmm', 'PPPP', 24) insert into tabela(imie, nazwisko, numer) values('AAAA, 'WWW, 23) potrzebuje zastapic to jednym zapytaniem dzialajacym w PL/SQLu W mySQLu możliwe jest takie rozwiązanie przy uzyciu przecinka miedzy wstawianymi rekordami: insert into tabela(imie, nazwisko, numer) values('Mmm', 'PPPP', 24), ('AAAA, 'WWW, 23)
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 11-05-2007 12:32
Dnia Mon, 23 Apr 2007 19:13:39 +0200, smerf <smerf@akcesoria.home.pl> wklepał(-a):
>Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na >bazie Oraclowej >W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w >PL/SQLu nie dziala LIMIT >select id, data from tabela order by data desc limit 1
Jeśli zapytanie nie zwraca wielu rekordów to zrób kursor z sortowaniem i: OPEN cur_a; FETCH cur_a INTO rec_a; CLOSE cur_a;
i masz pierwszy wiersz.
>Drugi problem lezy przy wstawianiu w petli kilku rekordow. Zamiast >wrzucania każdego wiersza osobno, jak ponizej: >insert into tabela(imie, nazwisko, numer) values('Mmm', 'PPPP', 24) >insert into tabela(imie, nazwisko, numer) values('AAAA, 'WWW, 23) >potrzebuje zastapic to jednym zapytaniem dzialajacym w PL/SQLu
A skąd wstawiasz te dane?
Jeśli są w tabeli PL/SQL to FORALL: http://www.oracle-base.com/articles/...ocessing9i.php -- 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
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 11-05-2007 12:32
smerf wrote: > Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na > bazie Oraclowej > W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w > PL/SQLu nie dziala LIMIT > select id, data from tabela order by data desc limit 1
O ile dobrze pamiętam to where rownum <= 1
-- P.M.
dips - 11-05-2007 12:32
smerf napisał(a): > Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na > bazie Oraclowej > W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w > PL/SQLu nie dziala LIMIT > select id, data from tabela order by data desc limit 1 > > Drugi problem lezy przy wstawianiu w petli kilku rekordow. Zamiast > wrzucania każdego wiersza osobno, jak ponizej: > insert into tabela(imie, nazwisko, numer) values('Mmm', 'PPPP', 24) > insert into tabela(imie, nazwisko, numer) values('AAAA, 'WWW, 23) > potrzebuje zastapic to jednym zapytaniem dzialajacym w PL/SQLu > W mySQLu możliwe jest takie rozwiązanie przy uzyciu przecinka miedzy > wstawianymi rekordami: > insert into tabela(imie, nazwisko, numer) values('Mmm', 'PPPP', 24), > ('AAAA, 'WWW, 23)
mialem te same pytania kiedys:)
odnosnie limit tojak kolega napisal użyj rownum (unikalny id dla każdej wyselectowanej grupy rekordów)
a insertow wielokrotnych po prostu sie nie da(albo ja do tej pory nie wiem jak). wiec pozostaje wpisywanie wszystkeigo po kolei.
TW - 11-05-2007 12:32
On 23 Kwi, 22:33, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote: > smerf wrote: > > Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na > > bazie Oraclowej > > W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w > > PL/SQLu nie dziala LIMIT > > select id, data from tabela order by data desc limit 1 > > O ile dobrze pamiętam to where rownum <= 1 > > -- > P.M.
rownum nadawany jest przed sortowaniem, więc nie zadziała...
TW - 11-05-2007 12:32
On 24 Kwi, 08:30, dips <d...@sayno2s.pl> wrote: > smerf napisał(a): > > > Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na > > bazie Oraclowej > > W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w > > PL/SQLu nie dziala LIMIT > > select id, data from tabela order by data desc limit 1 > > > Drugi problem lezy przy wstawianiu w petli kilku rekordow. Zamiast > > wrzucania każdego wiersza osobno, jak ponizej: > > insert into tabela(imie, nazwisko, numer) values('Mmm', 'PPPP', 24) > > insert into tabela(imie, nazwisko, numer) values('AAAA, 'WWW, 23) > > potrzebuje zastapic to jednym zapytaniem dzialajacym w PL/SQLu > > W mySQLu możliwe jest takie rozwiązanie przy uzyciu przecinka miedzy > > wstawianymi rekordami: > > insert into tabela(imie, nazwisko, numer) values('Mmm', 'PPPP', 24), > > ('AAAA, 'WWW, 23) > > mialem te same pytania kiedys:) > > odnosnie limit tojak kolega napisal użyj rownum (unikalny id dla każdej > wyselectowanej grupy rekordów) >
tylko, jak napisałem powyżej, dostaniesz rekord z rownum=1 nadanym przed sortowaniem
> a insertow wielokrotnych po prostu sie nie da(albo ja do tej pory nie > wiem jak). wiec pozostaje wpisywanie wszystkeigo po kolei.
jerry - 11-05-2007 12:32
smerf napisał(a): > Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na > bazie Oraclowej > W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w > PL/SQLu nie dziala LIMIT > select id, data from tabela order by data desc limit 1
SELECT * FROM ( SELECT kol1, kol2 FROM tabela ORDER BY kol1 ) WHERE ROWNUM = 1
Darek - 11-05-2007 12:32
> > O ile dobrze pamiętam to where rownum <= 1 > >rownum nadawany jest przed sortowaniem, więc nie zadziała...
Tu masz racje. Mozna by za to uzyc funkcji rankingu ROW_NUMBER()
pozdrawiam Darek
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 11-05-2007 12:32
TW wrote: > On 23 Kwi, 22:33, Paweł Matejski <m...@spam.madej.pl.eu.org> wrote: >> smerf wrote: >>> Potrzebuje ograniczyć zapytanie do wyświetlenia pierwszego rekordu - na >>> bazie Oraclowej >>> W mySQLu dopuszczalna jest ponizsza postac tego zapytania, niestety w >>> PL/SQLu nie dziala LIMIT >>> select id, data from tabela order by data desc limit 1 >> O ile dobrze pamiętam to where rownum <= 1 > > rownum nadawany jest przed sortowaniem, więc nie zadziała...
A... umkło mi to order by. :/
W takim wypadku robi sie to z podzapytaniem:
select * from (select id, data from tabela order by data desc) a where rownym <=1
-- P.M.
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 11-05-2007 12:32
Dnia Tue, 24 Apr 2007 08:30:26 +0200, dips <dips@sayno2s.pl> wklepał(-a):
>a insertow wielokrotnych po prostu sie nie da(albo ja do tej pory nie >wiem jak). wiec pozostaje wpisywanie wszystkeigo po kolei.
Da się - FORALL ... INSERT, ale dane muszą być w tablicy (a właściwie to każda kolumna musi być reprezentowana jako tablica 1-wymiarowa). -- 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
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[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?=
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
[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"..?=
[Oracle] =?ISO-8859-2?Q?=A3=B1czenie_wierszy_z_zapytania_?==?ISO-8859-2?Q?w_jeden_string?=
zanotowane.pldoc.pisz.plpdf.pisz.plshutter.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 |
|