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
-
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:
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
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
-
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
-
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 :)