0

10 進数値を返す関数を作成しようとしています。私はMySQLが初めてです。MSSQL の経験があります。これがコードです。

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

テーブル PERSONAS の結果セットは次のとおりです。

    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',
    'leandro.nnz@gmail.com', '4500.00', '2010-04-19', '0'

問題は、vTOTAL が常に NULL 値を返すことと、vTOTAL の結果が 4500.00 であることを確認できることです。そのため、CASE 式にエラーがあると思います。コメントや提案をありがとう。

4

1 に答える 1

0

その関数では、クエリが行を返さない場合に NULL を取得しませんか? おそらく、カテゴリ関連のデータまたは人物関連のデータを結合したままにしておく必要があります。

于 2013-04-28T15:10:59.563 に答える