postgresql - problemy z castem
Norbert - 03-01-2007 00:24
postgresql - problemy z castem
Witam,
czy spotkaliscie sie z problemem ktory objawia sie komunikatami typu:
invalid input syntax for type numeric: "#EE5555"
lub tez
ERROR: numeric field overflow DETAIL: The absolute value is greater than or equal to 10^3 for field with precision 3, scale 0.
Problem pojawil mi sie gdy we view'sie zrobilem casta wartosci varchar na int'a, numeric'a lub float'a a nastepnie zapytalem sie o te wartosc w WHERE
czyli we viewsie (dla postgresa 8 ) mam tak:
CREATE VIEW v_test AS SELECT cast(vat_sp.s_parametr_wartosc as numeric(10,3)) AS f_vat_sp_produkt
i przy probie takiego zapytania
SELECT * from v_test WHERE f_vat_sp_produkt=22
dostaje komunikat
ERROR: invalid input syntax for type numeric: "#EE5555"
Probowalem tez tak SELECT * from v_test WHERE f_vat_sp_produkt=(cast('22' as numeric(10,3)))
ale to tez nie pomaga
Jak to rozwiazac?
Z gory dzieki za pomoc
Pozdr.
Norbert
Herakles - 03-01-2007 00:24
"Norbert" <norbertn_at_post.pl.i.dont.like.sp_a_m> wrote:
> Witam, > > czy spotkaliscie sie z problemem ktory objawia sie komunikatami typu: > > invalid input syntax for type numeric: "#EE5555"
I teraz przeanalizuj poniższe przykłady.
testowa=# select cast('22' as numeric(10,3)); numeric --------- 22.000 (1 row)
testowa=# select cast('22222222222222222222222' as numeric(10,3)); ERROR: numeric field overflow DETAIL: The absolute value is greater than or equal to 10^22 for field with precision 10, scale 3.
testowa=# select cast('#EE5555' as numeric(10,3)); ERROR: invalid input syntax for type numeric: "#EE5555"
Czyli masz kolorowy ten vat u siebie, no nie?
hubert depesz lubaczewski - 03-01-2007 00:24
On 2007-01-02, Norbert <norbertn_at_post.pl.i.dont.like.sp_a_m> wrote: > czy spotkaliscie sie z problemem ktory objawia sie komunikatami typu: > invalid input syntax for type numeric: "#EE5555"
starasz się castowac dane "#EE5555" na numeric'a. nie działa - co nie jest dziwne, bo to nie jest prawidłowa liczba.
> lub tez > ERROR: numeric field overflow > DETAIL: The absolute value is greater than or equal to 10^3 for field with > precision 3, scale 0.
sorry, ale czego z tego tekstu nie rozumiesz?
> Jak to rozwiazac?
poprawić dane i casty?
depesz
-- http://www.depesz.com/ - blog dla ciebie
Norbert - 03-01-2007 00:24
dzięki za odpowiedzi, ale nadal jestem w lesie
test=# select f_vat_sp_produkt from v_test; f_vat_sp_produkt ------------------ 22.000 (1 row) nie zwraca mi #EE5555, tylko 22.000
Postaram sie przyblizyc problem, ponizsze to o czym rozmawiamy to oczywiscie uproszczony przyklad, ale generujacy te same bledy
CREATE TABLE config ( i_id INTEGER, nazwa VARCHAR(30), wartosc VARCHAR(30) ) ;
COMMIT;
INSERT INTO "config" ("i_id", "nazwa", "wartosc") VALUES (1,'nazwa','abc');
INSERT INTO "config" ("i_id", "nazwa", "wartosc") VALUES (2,'adres','aaa');
INSERT INTO "config" ("i_id", "nazwa", "wartosc") VALUES (3,'vat_22','22');
INSERT INTO "config" ("i_id", "nazwa", "wartosc") VALUES (4,'vat_7','7');
no i views:
CREATE VIEW v_test AS SELECT p.i_id, p.nazwa, cast(c.wartosc as numeric (10,3)) AS f_vat FROM produkt p JOIN config c ON (p.vat = c.i_id);
test=# select * from v_test where f_vat=22; ERROR: invalid input syntax for type numeric: "abc"
Wyglada to tak jakby moj where lecial po "calosci" a dopiero pozniej dzialal inner join z views'a, ale to jest chyba bez sensu.
Jakies pomysly?
Pozdr.
Norbert
Ronald Kuczek - 03-01-2007 00:24
Norbert napisał(a): > Wyglada to tak jakby moj where lecial po "calosci" a dopiero pozniej dzialal > inner join z views'a, ale to jest chyba bez sensu. >
Pośpiech Twoim wrogiem ;-) Skoro f_vat jest aliasem do cast(c.wartosc as numeric (10,3)) a w zapytaniu żądasz - where f_vat=22 to pomyśl przez chwilę, relaks, dlaczego to tak działa a nie inaczej (czyli dostajesz błąd). IMO prościej byłoby do tabeli config dodać kolumnę numeryczną value_type i napisać widok tak (case when blabla) , aby nie wysypał się nigdy.
Pozdrawiam Rony
Norbert - 03-01-2007 00:24
skonczylo sie na tym ze ograniczylem zakres tego views'a w taki sposob aby z tabeli config byly pobierane tylko te dane, ktore beda sie dobrze castowac .... i dziala, dziekuje wszystkim za pomoc
Pozdrawiam
Norbert
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
zanotowane.pldoc.pisz.plpdf.pisz.planette.xlx.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 |
|