[Oracle 10.2] klauzula WHERE i RowNum i...
jerry - 16-11-2006 00:22
[Oracle 10.2] klauzula WHERE i RowNum i...
Witam, Mam funkcję zwracającą NUMBER: fnWFlGetIProcessParameter()
Mam zapytanie w którym ją wywołuję - z tymi argumentami ona zwraca wartość 3 - sprawdziłem select funkcja from dual:
select b.*, rownum rn from ( select pi.status wk_tekst3, pi.processdef_type wk_tekst4 from twflprocessinstances pi where pi.createworker_id = fnWFlGetIProcessParameter( 'this', '', 396,'wk_integer',null) order by wk_tekst3 ) b
To zapytanie nie zwraca żadnych wierszy... Choć dla pi.createworker_id = 3 powinno ich być w diabła. Dlaczego dodanie na końcu :
where rownum <=5
powoduje, że dostaję w wyniku 5 wierszy? Z pustego i Salomon, a jednak...
Jeżeli też zamiast pi.createworker_id = fnWFlGetIProcessParameter( 'this', '', 396,'wk_integer',null) wstawię na sztywno pi.createworker_id = 3 to zwraca tyle wierszy ile trzeba, i gdy dostawię ograniczenie rownum <=5 logiczne i zrozumiałe jest, że z XXX wierszy dostaję 5. Jednak gdy jest tam funkcja to z 0 wierszy dostaję 5 - bug?
Jeżeli zaś wytnę z zapytania order by wk_tekst3 to też działa świetnie razem z funkcją.
Czy ktoś może mi wyjaśnić te zależności
Michał Kuratczyk - 16-11-2006 00:22
jerry wrote: > Czy ktoś może mi wyjaśnić te zależności Mógłbyś podać pełny przykład - z odpowiednimi CREATE TABLE, i INSERTami, żeby można było sobie to uruchomić u siebie?
-- Michał Kuratczyk
jerry - 16-11-2006 00:22
> Mógłbyś podać pełny przykład - z odpowiednimi CREATE TABLE, > i INSERTami, żeby można było sobie to uruchomić u siebie?
Niestety to nie pójdzie tak prosto - zwłaszcza funkcja jest złozona biznesowo (funkcje wewnętrzne) i odwołuje się do wielu tabel i sekwencji :( Mnie najbardzie jzadziwia fakt, dlaczego po dodaniu klauzuli WHERE rownum <= x select, który zwracał pusty wynika, teraz zwraca to co trzeba ??? Gdzie sens...
Ja to rozwiązałem tak, że zamiast podstawiać pod tamto id = funkcja wstawiam: id = (select funkcja from dual) no ale niesmak pozostaje.
Michał Kuratczyk - 16-11-2006 00:22
jerry wrote: >> Mógłbyś podać pełny przykład - z odpowiednimi CREATE TABLE, >> i INSERTami, żeby można było sobie to uruchomić u siebie? > Niestety to nie pójdzie tak prosto - zwłaszcza funkcja jest złozona > biznesowo (funkcje wewnętrzne) i odwołuje się do wielu tabel i sekwencji No to lipa - ja zrobiłem sobie jakieś tabele, jakąś funkcję i analogiczne zapytanie i działa bez problemu.
> Mnie najbardzie jzadziwia fakt, dlaczego po dodaniu klauzuli WHERE > rownum <= x select, który zwracał pusty wynika, teraz zwraca to co > trzeba ??? Gdzie sens... Ano jest to dziwne i dlatego chętnie bym to pomęczył, ale cóż - mój test działa, a gołym okiem nie widzę u Ciebie błędów, więc kiepska sprawa. Może być bug - zdarza się, więc radzę zgłosić SRa.
-- Michał Kuratczyk
Michał Kuratczyk - 16-11-2006 00:22
Michał Kuratczyk wrote: >>> Mógłbyś podać pełny przykład - z odpowiednimi CREATE TABLE, >>> i INSERTami, żeby można było sobie to uruchomić u siebie? >> Niestety to nie pójdzie tak prosto - zwłaszcza funkcja jest złozona >> biznesowo (funkcje wewnętrzne) i odwołuje się do wielu tabel i sekwencji > No to lipa - ja zrobiłem sobie jakieś tabele, jakąś funkcję i analogiczne > zapytanie i działa bez problemu. Oczywiście jeśli masz czas, to spróbuj uprościć swój problem - może przy okazji znajdziesz przyczynę. Jeśli ciało funkcji zastąpisz przez "return 3", to też jest problem? Jeśli tak, to już masz dużo mniej potencjalnych źródeł problemu.
-- Michał Kuratczyk
jerry - 16-11-2006 00:23
> Jeśli ciało funkcji zastąpisz przez "return > 3", to też jest problem?
Takj zrobiłem. Funkcja zwraca wartość = 3 i działa bezproblemowo. Dalej jednak nie mam czasu drążyć tą funkcję - bo ona jest zatrważająca. Do problemu jednak wrócę w przyszłości, bo jest dość intrygujący. Dziękuję Ci za poświęcony czas. Pozdrawiam,
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.plquentinho.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 |
|