2013-04-28 3 views
0

Я пытаюсь создать функцию, которая возвращает десятичное значение. Я новичок в MySQL. У меня есть опыт работы в MSSQL. Вот код.Ошибка выражения CASE MySQL

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$$ 

Вот ResultSet таблицы персон

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

+0

SELECT FN_SUELDO_BASICO (1); – leandronn

ответ

0

С помощью этой функции вы не получите NULL, если запрос не возвращает строки? Вероятно, вам следует присоединиться к данным, связанным с вашей категорией, или к вашим данным, связанным с вашим персоналом.

+0

Спасибо за помощь. Это БД разработки, поэтому каждая таблица имеет отношение. SELECT * FROM PERSONAS__r__CATEGORIAS; Возврат 1,1 SELECT * FROM CATEGORIAS; возвращает это: '1', 'Vigilador Граля.', '3150,00', '900,00', '600.00' '2', 'Vigilador Bombero', '3466,00', '900,00', '600,00' '3', 'Administrativo', '3623,00', '900,00', '600,00' Заранее спасибо. – leandronn

+0

Проблема была в структуре таблицы. Виноват. – leandronn

Смежные вопросы