2013-04-28 70 views
0

我想創建一個返回小數值的函數。 我是MySQL新手。我有MSSQL的經驗。 這是代碼。MySQL CASE表達式錯誤

delimiter $$ 

    CREATE FUNCTION FN_SUELDO_BASICO(pLEGAJO_ID INT) 
    RETURNS decimal(12,2) 
    BEGIN 

    DECLARE vTOTAL DECIMAL(12,2); 

    SELECT 
     CASE WHEN PERSONAS.SUELDO_BASICO = 0 
     THEN CATEGORIAS.SUELDO_BASICO 
     ELSE PERSONAS.SUELDO_BASICO 
     END 
    INTO vTOTAL 
    FROM CATEGORIAS 
    JOIN PERSONAS__r__CATEGORIAS PrC 
     ON CATEGORIAS.ID = PrC.CATEGORIA_ID 
    JOIN PERSONAS 
     ON PERSONAS.ID = pLEGAJO_ID; 

    RETURN vTOTAL; 

    END$$ 

這裏的表的結果集角色

CREATE TABLE `PERSONAS` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NOMBRE` varchar(100) COLLATE latin1_general_ci NOT NULL, 
    `APELLIDO` varchar(100) COLLATE latin1_general_ci NOT NULL, 
    `DNI` varchar(10) COLLATE latin1_general_ci NOT NULL, 
    `CUIL` varchar(45) COLLATE latin1_general_ci DEFAULT NULL, 
    `DIRECCION` varchar(45) COLLATE latin1_general_ci DEFAULT NULL, 
    `LOCALIDAD_ID` int(11) DEFAULT NULL, 
    `PARTIDO_ID` int(11) DEFAULT NULL, 
    `PROVINCIA_ID` int(11) DEFAULT NULL, 
    `TELEFONO1` varchar(20) COLLATE latin1_general_ci DEFAULT NULL, 
    `TELEFONO2` varchar(20) COLLATE latin1_general_ci DEFAULT NULL, 
    `EMAIL` varchar(20) COLLATE latin1_general_ci DEFAULT NULL, 
    `SUELDO_BASICO` decimal(12,2) DEFAULT NULL, 
    `FECHA_INGRESO` date NOT NULL, 
    `SINDICATO` bit(1) DEFAULT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `DNI` (`DNI`), 
    KEY `NOM_AP` (`NOMBRE`,`APELLIDO`), 
    KEY `CUIL` (`CUIL`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci$$ 



    SELECT * FROM PERSONAS WHERE ID = 1; 



    '1', 'Leandro', 'Nuñez', '28.111.519', '20-28111519-0', 
    '11 de Septiembre 111 Dto B', '1', '1', '1', '4225-1111', '15-1111-1834', 
    '[email protected]', '4500.00', '2010-04-19', '0' 

的問題是,VTOTAL總是返回NULL值,你可以怎麼看,VTOTAL的結果應該是4500.00,所以我認爲有錯誤與CASE表達式。 感謝您的任何意見或建議。

+0

你是如何調用該函數的?請發佈該代碼。 – Bohemian 2013-04-28 15:06:40

+0

SELECT FN_SUELDO_BASICO(1); – leandronn 2013-04-28 22:03:33

回答

0

使用該函數,如果查詢不返回任何行,您不會得到NULL嗎?您可能應該加入您的與類別相關的數據或與您的人員相關的數據。

+0

感謝您的幫助。這是一個開發數據庫,​​所以每個表都有一個關係。 SELECT * FROM PERSONAS__r__CATEGORIAS; 回報1,1 SELECT * FROM CATEGORIAS; 返回此: '1', 'Vigilador GRAL。', '3150.00', '900.00', '600.00' '2', 'Vigilador Bombero', '3466.00', '900.00', '600.00' '3','Administrativo','3623.00','900.00','600.00' 在此先感謝。 – leandronn 2013-04-28 22:06:27

+0

問題出在表結構上。我的錯。 – leandronn 2013-05-02 15:01:47