Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: wam]Spider007 13 Září 2008, 13:36:20

Název: MySQL - Data truncated for column P_RETVAL at Row 1 [VYRIESENE]
Přispěvatel: wam]Spider007 13 Září 2008, 13:36:20
Nazdar neviem ci je to bug, alebo len mam nejaku syntakticku chybu, ale pri selecte z jedneho view mi stale pise warning Data truncated for column P_RETVAL at Row 1 a este aj Out of range value adjusted for column P_DATUM at Row 1

to view vyzera asi takto:
Kód: [Vybrat]
CREATE VIEW V_POLOZKY_DUAL
AS
SELECT VP.POLID
,VP.NAKID
,VP.NAZOV_POLOZKY
,VP.CENA_POLOZKY
,VP.POCET_KUSOV
,VP.CENA_POL_CELKOM
,PREPOCET_EURO(VN.DATUM, VP.CENA_POL_CELKOM) AS INFO_CENA
FROM V_POLOZKY VP
LEFT JOIN V_NAKUP VN ON VN.NAKID = VP.NAKID;

je tam pouzita jedna funkcia PREPOCET_EURO
Kód: [Vybrat]
DELIMITER $$

CREATE PREPOCET_EURO(P_DATUM DATE, P_SUMA DECIMAL(18,4))
RETURNS decimal(18,4)
BEGIN
DECLARE P_RETVAL DECIMAL(18,4);
DECLARE P_KURZ DECIMAL(18,4);

SET P_KURZ = 30.1260;

IF (P_DATUM < '2009-01-01') THEN
-- suma je v SKK a teda ju prepocitame na EURO
SET P_RETVAL = (P_SUMA / P_KURZ);
ELSE
-- suma je v EURO a teda ju prepocitame na SKK
SET P_RETVAL = (P_SUMA * P_KURZ);
END IF;

RETURN P_RETVAL;
END$$

DELIMITER ;

select vrati spravne data, ale ten warning ma dost stve
Název: Re: MySQL - Data truncated for column P_RETVAL at Row 1
Přispěvatel: Martin Kiklhorn 14 Září 2008, 07:42:58
VN.DATUM je date nebo datetime?

co se týká trucated

tohle OK? SET P_RETVAL = (P_SUMA * P_KURZ)

a tohle warning? SET P_RETVAL = (P_SUMA / P_KURZ);

- dosaďte si třeba 30/30.1260 vyjde vám více než čtyři desetinná místa
Název: Re: MySQL - Data truncated for column P_RETVAL at Row 1
Přispěvatel: wam]Spider007 14 Září 2008, 10:27:14
ano VN.DATUM ja DATE

pomohlo urobit SET P_RETVAL = ROUND ((P_SUMA / P_KURZ), 4);

diky moc K+

aj ked nechapem preco sa to takto sprava, v Oracle aj v MS SQL by to preslo v pohode. Nevadi, zase som mudrejsi :)