ďťż
 
nvl zwraca dziwna wartosc ďťż
 
nvl zwraca dziwna wartosc
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lisinski.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com