在MySQL中执行存储过程时出现错误1064

时间:2020-03-19 14:25:49

标签: mysql stored-procedures

以下是我的存储过程,该存储过程已从MS SQL转换为Mysql格式,但在200行出现错误。如果社区中有人可以提供帮助,我们将不胜感激

错误代码:1064 您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第218行的''附近使用

  DELIMITER //

    CREATE PROCEDURE ScoringWaled.2 ( p_nroSolicitud INT, p_genero SMALLINT, p_estadoCivil SMALLINT, p_trEdad SMALLINT, p_departamento SMALLINT, p_sitLaboral SMALLINT,
                            p_trAntigLaboral SMALLINT, p_trIngresos SMALLINT, p_esCliente CHAR(1), p_trAntigCliente SMALLINT,
                            p_CantOperAnterioresAnt SMALLINT, p_tuvoAtrasosCli CHAR(1), p_tieneBuro CHAR(1), p_tieneProdActivos CHAR(1),
                            p_tuvoProblemasBuro CHAR(1), p_esFuncionario CHAR(1))
    BEGIN



    DECLARE v_ptosPerfil DOUBLE DEFAULT 0; DECLARE v_ptosGenero DOUBLE DEFAULT 0; DECLARE v_ptosEstCivil DOUBLE DEFAULT 0; DECLARE v_ptosEdad DOUBLE DEFAULT 0; DECLARE v_ptosDepartamento DOUBLE DEFAULT 0; DECLARE v_ptosSitLaboral DOUBLE DEFAULT 0; DECLARE v_ptosAntigLaboral DOUBLE DEFAULT 0; DECLARE v_ptosIngresos DOUBLE DEFAULT 0;
            DECLARE v_ptosVinculacion DOUBLE DEFAULT 0; DECLARE v_ptosEsCliente DOUBLE DEFAULT 0; DECLARE v_ptosAntigCliente DOUBLE DEFAULT 0; DECLARE v_ptosCantOperaciones DOUBLE DEFAULT 0; DECLARE v_ptosTuvoAtrasosCli DOUBLE DEFAULT 0;
            DECLARE v_ptosOperacion DOUBLE DEFAULT 0; 
            DECLARE v_ptosBuro DOUBLE DEFAULT 0; DECLARE v_ptosTieneBuro DOUBLE DEFAULT 0; DECLARE v_ptosTieneProdActivos DOUBLE DEFAULT 0; DECLARE v_ptosTuvoProblemasBuro DOUBLE DEFAULT 0; DECLARE v_ptosEsFuncionario DOUBLE DEFAULT 0;
            DECLARE v_ptosScoring DOUBLE DEFAULT 0;
    DECLARE v_grupoDepartamento SMALLINT; DECLARE v_salarioMinimo DOUBLE; DECLARE v_ingresos DOUBLE; DECLARE v_relIngSalMin DOUBLE; DECLARE v_trRelIngSalMin DOUBLE;
    DECLARE v_techo DOUBLE; DECLARE v_coefSitLaboral DOUBLE; DECLARE v_montoAprobado30 DOUBLE DEFAULT 0; DECLARE v_montoAprobado60 DOUBLE DEFAULT 0; DECLARE v_montoAprobado90 DOUBLE DEFAULT 0; DECLARE v_montoAprobado180 DOUBLE DEFAULT 0;
    DECLARE v_ptosOperacion180 DOUBLE; 
    DECLARE v_ptosOperacion90  DOUBLE; 
    DECLARE v_ptosOperacion60  DOUBLE;
    DECLARE v_ptosOperacion30  DOUBLE;


    SET v_ptosOperacion30  = ((30  * 0.70) + (100 * 0.30)) * 0.30;
    SET v_ptosOperacion60  = ((50  * 0.70) + (100 * 0.30)) * 0.30;
    SET v_ptosOperacion90  = ((70  * 0.70) + (100 * 0.30)) * 0.30;
    SET v_ptosOperacion180 = ((100 * 0.70) + (100 * 0.30)) * 0.30;


    CALL ScoringWaled.2Puntaje( 'Genero', v_genero, '', v_ptosGenero);



    CALL ScoringWaled.2Puntaje( 'EstadoCivil', v_estadoCivil, '', v_ptosEstCivil);



    CALL ScoringWaled.2Puntaje( 'Edad', v_trEdad, '', v_ptosEdad);



    SET v_grupoDepartamento = 
    CASE WHEN p_departamento = 1 THEN 1
         WHEN p_departamento IN(2, 3, 4, 5, 6, 7) THEN 2
         WHEN p_departamento IN(8, 9, 10, 11, 12, 13, 14, 15, 16, 17) THEN 3
         ELSE 3
    END;

    CALL ScoringWaled.2Puntaje( 'Departamento', v_grupoDepartamento, '', v_ptosDepartamento);



    CALL ScoringWaled.2Puntaje( 'SitLaboral', v_sitLaboral, '', v_ptosSitLaboral);



    CALL ScoringWaled.2Puntaje( 'AntigLaboral', v_trAntigLaboral, '', v_ptosAntigLaboral);



    SET v_ingresos = 
    CASE WHEN p_trIngresos = 1 THEN 750000
         WHEN p_trIngresos = 2 THEN 1500000
         WHEN p_trIngresos = 3 THEN 2250000
         WHEN p_trIngresos = 4 THEN 3000000
         WHEN p_trIngresos = 5 THEN 3750000
         WHEN p_trIngresos = 6 THEN 4500000
         WHEN p_trIngresos = 7 THEN 8000000
    END;


    SET v_salarioMinimo = 2000000;
    SET v_relIngSalMin = v_ingresos / v_salarioMinimo ;

    SET v_trRelIngSalMin = 
    CASE WHEN v_relIngSalMin > 0 AND v_relIngSalMin < 0.75 THEN 1
         WHEN v_relIngSalMin >= 0.75 AND v_relIngSalMin < 1.5 THEN 2
         WHEN v_relIngSalMin >= 1.5 AND v_relIngSalMin < 2 THEN 3
         WHEN v_relIngSalMin >= 2 AND v_relIngSalMin < 4 THEN 4 
         WHEN v_relIngSalMin >= 4 THEN 5
    END;

    CALL ScoringWaled.2Puntaje( 'Ingresos', v_trRelIngSalMin, '', v_ptosIngresos);



    CALL ScoringWaled.2Puntaje( 'EsCliente', 0, v_esCliente, v_ptosEsCliente);



    IF p_esCliente = 'S' THEN
       CALL ScoringWaled.2Puntaje( 'AntigCliente', v_trAntigCliente, '', v_ptosAntigCliente);
    END IF;



    IF p_esCliente = 'S' THEN
       CALL ScoringWaled.2Puntaje( 'CantOperaciones', v_CantOperAnterioresAnt, '', v_ptosCantOperaciones);
    END IF;



    IF p_esCliente = 'S' THEN
       CALL ScoringWaled.2Puntaje( 'TuvoAtrasosCli', 0, v_tuvoAtrasosCli, v_ptosTuvoAtrasosCli);
    END IF;



    CALL ScoringWaled.2Puntaje( 'TieneBuro', 0, v_tieneBuro, v_ptosTieneBuro);



    IF p_tieneBuro = 'S' THEN
       CALL ScoringWaled.2Puntaje( 'TieneProdActivos', 0, v_tieneProdActivos, v_ptosTieneProdActivos);
    END IF;



    IF p_tieneBuro = 'S' THEN
       CALL ScoringWaled.2Puntaje( 'TuvoProblemasBuro', 0, v_tuvoProblemasBuro, v_ptosTuvoProblemasBuro);
    END IF;




    IF p_tieneBuro = 'S' THEN
       CALL ScoringWaled.2Puntaje( 'EsFuncionario', 0, v_esFuncionario, v_ptosEsFuncionario);
    END IF;


    IF p_sitLaboral = 1 THEN
       CALL ScoringWaled.2Puntaje( 'CoefSitLaboralEmpleado', v_CantOperAnterioresAnt, '', v_coefSitLaboral);
    ELSE
       CALL ScoringWaled.2Puntaje( 'CoefSitLaboralAutonomo', v_CantOperAnterioresAnt, '', v_coefSitLaboral);


    CREATE TEMPORARY TABLE techos (tNivel CHAR(1), tPtosScorDesde SMALLINT, tPtosScorHasta SMALLINT, tTecho DOUBLE);
    INSERT INTO techos (`tNivel`,`tPtosScorDesde`,`tPtosScorHasta`,`tTecho`) VALUES ('A', 70, 100, 2000000);
    INSERT INTO techos (`tNivel`,`tPtosScorDesde`,`tPtosScorHasta`,`tTecho`) VALUES('B', 65,  70, 1500000);
    INSERT INTO techos (`tNivel`,`tPtosScorDesde`,`tPtosScorHasta`,`tTecho`) VALUES('C', 60,  65, 1000000);
    INSERT INTO techos (`tNivel`,`tPtosScorDesde`,`tPtosScorHasta`,`tTecho`) VALUES('D', 50,  60,  650000);
    INSERT INTO techos  (`tNivel`,`tPtosScorDesde`,`tPtosScorHasta`,`tTecho`) VALUES('E', 40,  50,  300000);
    INSERT INTO techos (`tNivel`,`tPtosScorDesde`,`tPtosScorHasta`,`tTecho`) VALUES('F',  0,  40,       0);

    SET v_ptosPerfil = 0.25 * (v_ptosGenero + v_ptosEstCivil + v_ptosEdad + v_ptosDepartamento + v_ptosSitLaboral + v_ptosAntigLaboral + v_ptosIngresos);
    SET v_ptosVinculacion = 0.15 * (v_ptosEsCliente + v_ptosAntigCliente + v_ptosCantOperaciones + v_ptosTuvoAtrasosCli);
    SET v_ptosOperacion = 0.30 * 0;
    SET v_ptosBuro = 0.30 * (v_ptosTieneBuro + v_ptosTieneProdActivos + v_ptosTuvoProblemasBuro + v_ptosEsFuncionario);

    SET v_ptosScoring = v_ptosPerfil + v_ptosVinculacion + v_ptosOperacion + v_ptosBuro;

    IF v_ptosOperacion = 0 -- El scoring recomienda monto
    THEN
       SELECT MAX(tTecho) INTO v_techo FROM techos WHERE (v_ptosScoring + v_ptosOperacion30) > tPtosScorDesde AND (v_ptosScoring + v_ptosOperacion30) <= tPtosScorHasta;
       IF v_techo > 0
       THEN
          IF v_techo < (v_ingresos * v_coefSitLaboral) THEN
             SET v_montoAprobado30 = v_techo;
          ELSE
             SET v_montoAprobado30 = v_ingresos * v_coefSitLaboral;
          END IF;
       END IF;

       SELECT MAX(tTecho) INTO v_techo FROM techos WHERE (v_ptosScoring + v_ptosOperacion60) > tPtosScorDesde AND (v_ptosScoring + v_ptosOperacion60) <= tPtosScorHasta;
       IF v_techo > 0
       THEN
          IF v_techo < (v_ingresos * v_coefSitLaboral) THEN
             SET v_montoAprobado60 = v_techo;
          ELSE
             SET v_montoAprobado60 = v_ingresos * v_coefSitLaboral;
          END IF;
       END IF;

       SELECT MAX(tTecho) INTO v_techo FROM techos WHERE 
       (v_ptosScoring + v_ptosOperacion90) > tPtosScorDesde AND (v_ptosScoring + v_ptosOperacion90) <= tPtosScorHasta;
       IF v_techo > 0
       THEN
          IF v_techo < (v_ingresos * v_coefSitLaboral) THEN
             SET v_montoAprobado90 = v_techo;
          ELSE
             SET v_montoAprobado90 = v_ingresos * v_coefSitLaboral;
          END IF;
       END IF;

       SELECT MAX(tTecho) INTO v_techo FROM techos WHERE (v_ptosScoring + v_ptosOperacion180) > tPtosScorDesde AND 
       (v_ptosScoring + v_ptosOperacion180) <= tPtosScorHasta;
       IF v_techo > 0
       THEN
          IF v_techo < (v_ingresos * v_coefSitLaboral) THEN
             SET v_montoAprobado180 = v_techo;
          ELSE
             SET v_montoAprobado180 = v_ingresos * v_coefSitLaboral;
          END IF;
       END IF;


    END IF;

    SELECT  v_montoAprobado30  MontoAprobado30, v_montoAprobado60 MontoAprobado60,
    v_montoAprobado90 MontoAprobado90, v_montoAprobado180 MontoAprobado180 ;

    END;
    //
    DELIMITER ;

0 个答案:

没有答案