Re: Oracle - Procedura skladowana zwracajaca liste rekordow
Marcin Sobieszek - 04-11-2005 23:16
Hi,
Jarek wrote: > Mam pytanie jak w Oraclu obsluzyc nastepujaca konstrukcje z Firebirda: > > select * from "nazwa_procedury(parametr1, parametr2)";
co prawda nie znam sie na firebirdzie, ale w oraclu wyglada to tak:
http://www.akadia.com/services/ora_pipe_functions.html
pozdrawiam -- Marcin Sobieszek
Morff - 11-11-2005 11:40
Marcin Sobieszek napisał(a): > Hi, > > Jarek wrote: > >> Mam pytanie jak w Oraclu obsluzyc nastepujaca konstrukcje z Firebirda: >> >> select * from "nazwa_procedury(parametr1, parametr2)"; > > > co prawda nie znam sie na firebirdzie, ale w oraclu wyglada to tak: > > http://www.akadia.com/services/ora_pipe_functions.html > > pozdrawiam > -- > Marcin Sobieszek
Jezeli wynikiem zapytania ma być tabela to proponuje zamiast procedury wykorzystac funkcję. Wtedy :
musisz mieć zadeklarowane 2 typy :
create type mojrekord as object(pole1,pole2,pole3)
create type mojatabelka as table of mojrekord
create or replace function moja_funkcja (parametr1 typ1,parametr2 typ2 ....) return mojatabelka is tmp_tabelka mojatabelka:=mojatabelka(); cursor kursor is jakiś tam selekt z parametrami .... begin for w in kursor loop --wypełniam tabelke danymi z kursora tmp_tabelka.extend; tmp_tabelka(tmp_tabelka.count):=mojrekord(w.pole1, w.pole2...); end loop; ... return tmp_tabelka; .... end.
zapytanie ma wtedy postac :
select * from table (cast(mojafunkcja(parametr1,parametr2...) as mojatabelka)
jezeli wynikiem ma być jedna wartość to teże lepiej z funkcji ..
select mojafunkcja(param1,param2) from dual
-- Pozdrawiam Morff ---------- AQQ 141151
Jarek Mazur - 13-11-2005 11:58
Morff napisał(a): > Marcin Sobieszek napisał(a): > >> Hi, >> >> Jarek wrote: >> >>> Mam pytanie jak w Oraclu obsluzyc nastepujaca konstrukcje z Firebirda: >>> >>> select * from "nazwa_procedury(parametr1, parametr2)"; >> >> >> >> co prawda nie znam sie na firebirdzie, ale w oraclu wyglada to tak: >> >> http://www.akadia.com/services/ora_pipe_functions.html >> >> pozdrawiam >> -- >> Marcin Sobieszek > > > Jezeli wynikiem zapytania ma być tabela to > proponuje zamiast procedury wykorzystac funkcję. Wtedy : > > musisz mieć zadeklarowane 2 typy : > > > create type mojrekord as object(pole1,pole2,pole3) > > create type mojatabelka as table of mojrekord > > create or replace function moja_funkcja (parametr1 typ1,parametr2 typ2 > ...) return mojatabelka > is > tmp_tabelka mojatabelka:=mojatabelka(); > cursor kursor is > jakiś tam selekt z parametrami > ... > begin > for w in kursor loop --wypełniam tabelke danymi z kursora > tmp_tabelka.extend; > tmp_tabelka(tmp_tabelka.count):=mojrekord(w.pole1, w.pole2...); > end loop; > .. > return tmp_tabelka; > ... > end. > > zapytanie ma wtedy postac : > > select * from table (cast(mojafunkcja(parametr1,parametr2...) as > mojatabelka) > > > jezeli wynikiem ma być jedna wartość to teże lepiej z funkcji .. > > select mojafunkcja(param1,param2) from dual > > dzieki, wlasnie takiego rozwiazania szukalem
pozdrawiam Jarek
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 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.plnumervin.keep.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 |
|