2013-04-28 6 views
0

10 진수 값을 반환하는 함수를 만들려고합니다. 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

+0

SELECT FN_SUELDO_BASICO (1); – leandronn

답변

0

이 함수를 사용하면 쿼리가 행을 반환하지 않으면 NULL이 반환되지 않습니까? 카테고리 관련 데이터 또는 사용자 관련 데이터에 계속 참여해야합니다.

+0

도움 주셔서 감사합니다. 이것은 개발 DB이므로 모든 테이블에는 관계가 있습니다. SELECT * FROM PERSONAS__r__CATEGORIAS; 반품 횟수 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

+0

테이블 구조에 문제가 있습니다. 내 실수. – leandronn