nvl zwraca dziwna wartosc
durnylka@gazeta.pl - 15-11-2006 00:15
nvl zwraca dziwna wartosc
Witam,
Zalozmy, ze tabela a_table jest pusta.
Czy ktos moze mi powiedziec, czemu nastepujacy skrypt:
set null 0
column c57 new_value av_sum_c57
select sum(nvl(t3101_expired,0)) c57 from a_table / prompt TEST: &av_sum_c57
zwraca taka wartosc:
TEST: -~
Natomiast po modyfikacji:
set null 0
column c57 new_value av_sum_c57
select nvl(sum(nvl(t3101_expired,0)),0) c57 from a_table / prompt TEST: &av_sum_c57
zwraca poprawnie:
TEST: 0
Czy to nie jest jakis bug?
Bede wdzieczny za pomoc!
Dzieki!
Michał Kuratczyk - 15-11-2006 00:15
durnylka@gazeta.pl wrote: > select sum(nvl(t3101_expired,0)) c57 > from > a_table > / > prompt TEST: &av_sum_c57 > > zwraca taka wartosc: > > TEST: -~ > (...) > select nvl(sum(nvl(t3101_expired,0)),0) c57 > from > a_table > / > prompt TEST: &av_sum_c57 > > zwraca poprawnie: > > TEST: 0 > > > Czy to nie jest jakis bug?
http://download-uk.oracle.com/docs/c...001.htm#i89203
Oracle applies the aggregate functions to each group of rows and returns a single result row for each group.
Ponieważ nie masz żadnych wierszy, to NVL wewnątrz SUM nigdy nie zostaje wykonywany, a zatem wynikiem jest NULL.
Swoją drogą, to ponieważ wiersze z NULLami nie zmienią Ci wyniku SUM, to wystarczy Ci ten zewnętrzny NVL.
-- Michał Kuratczyk
genuine - 15-11-2006 00:15
Użytkownik <durnylka@gazeta.pl> napisał w wiadomości news:1163507197.479728.73450@e3g2000cwe.googlegrou ps.com... > Witam, > > Zalozmy, ze tabela a_table jest pusta. > > Czy ktos moze mi powiedziec, czemu nastepujacy skrypt: > > set null 0 > > column c57 new_value av_sum_c57 > > select sum(nvl(t3101_expired,0)) c57 > from > a_table > / > prompt TEST: &av_sum_c57 > > zwraca taka wartosc: > > TEST: -~ > > Natomiast po modyfikacji: > > set null 0 > > column c57 new_value av_sum_c57 > > select nvl(sum(nvl(t3101_expired,0)),0) c57 > from > a_table > / > prompt TEST: &av_sum_c57 > > zwraca poprawnie: > > TEST: 0 > > > Czy to nie jest jakis bug? > > Bede wdzieczny za pomoc! > > Dzieki!
a tajk spytam, po co Ci ten NVL w srodku? nvl nie robi konwersji null na np. 0 tylko wyswietla np 0 zamiast null'a wiec po co w srodku go wsadzasz zanim zrobisz sume ?
Michał Kuratczyk - 15-11-2006 00:15
genuine wrote: > a tajk spytam, po co Ci ten NVL w srodku? To jest dobre pytanie.
> nvl nie robi konwersji null na np. 0 tylko wyswietla np 0 zamiast null'a Ale tu się mylisz (albo ja nie rozumiem). Jak widać na poniższym przykładzie NVL jak najbardziej podstawia 0 w miejsce NULLa.
SQL> select 1/null from dual;
1/NULL ----------
SQL> select 1/nvl(null, 0) from dual; select 1/nvl(null, 0) from dual * ERROR at line 1: ORA-01476: divisor is equal to zero
-- Michał Kuratczyk
genuine - 17-11-2006 07:14
Użytkownik "Michał Kuratczyk" <kura@lj.pl> napisał w wiadomości news:ejcg9k$2d2f$2@news2.ipartners.pl... > genuine wrote: >> a tajk spytam, po co Ci ten NVL w srodku? > To jest dobre pytanie. > >> nvl nie robi konwersji null na np. 0 tylko wyswietla np 0 zamiast null'a > Ale tu się mylisz (albo ja nie rozumiem). Jak widać na poniższym > przykładzie > NVL jak najbardziej podstawia 0 w miejsce NULLa. > > SQL> select 1/null from dual; > > 1/NULL > ---------- > > SQL> select 1/nvl(null, 0) from dual; > select 1/nvl(null, 0) from dual > * > ERROR at line 1: > ORA-01476: divisor is equal to zero > > -- > Michał Kuratczyk
Sie chyba nie dogadalismy. Toz mowie przecie ze NVL nie podstawia wartosci a jedynie ja WYSWIETLA
genuine - 17-11-2006 07:14
> SQL> select 1/null from dual; > > 1/NULL > ---------- > > > SQL> select 1/nvl(null, 0) from dual; > select 1/nvl(null, 0) from dual > * > ERROR at line 1: > ORA-01476: divisor is equal to zero > > -- > Michał Kuratczyk
a najelpszym tego przykladem jest twoj select powyzej
Michał Kuratczyk - 17-11-2006 07:14
genuine wrote: >> SQL> select 1/null from dual; >> >> 1/NULL >> ---------- >> >> SQL> select 1/nvl(null, 0) from dual; >> select 1/nvl(null, 0) from dual >> * >> ERROR at line 1: >> ORA-01476: divisor is equal to zero > Sie chyba nie dogadalismy. Toz mowie przecie ze NVL nie podstawia wartosci > a jedynie ja WYSWIETLA Jak to nie podstawia? To dlaczego dzielenie przez NULL daje NULL, a dzielenie przez NVL(NULL, 0) daje błąd dzielenia przez zero?
-- Michał Kuratczyk
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
Ms SQL Server 2000 i błąd przy nie wypełnionej wartościo w polusmalldatetime
Jak wyswietlic dane z dwoch tabel gdy dla jednej z nich jest brak jest danej wartosci
[mysql 4.0.24] INSERT do tabeli z automatyczną inkrementacją wartości pola.
=?iso-8859-1?q?mysql_domyslna_wartosc_kom=F3rki?=
[Oracle] PLSQL - wartosc z innego pola w zmienianaym rekordzie
[MySQL] wektor wartosci jako typ danej?
dynamiczny sql w plsql, szukanie wartosci w kolumnach
zanotowane.pldoc.pisz.plpdf.pisz.pllisinski.htw.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 |
|