当我是调用存储过程时,mysql中的错误代码1414

时间:2014-12-22 02:59:07

标签: mysql stored-procedures syntax-error

任何身体帮助我..  我打电话给sp而不是succses,

--==================================================================================
Query: call `sp_MasterDataPegawai`('','0123555','neni','P','001','001',1,'',null) 

Error Code: 1414
OUT or INOUT argument 9 for routine @maninds_std_mwt.sp_MasterDataPegawai is not a variable or NEW pseudo-variable in BEFORE trigger
--==================================================================================

这是我的sp:

--==================================================================================

DELIMITER $$

USE `@maninds_std_mwt`$$

DROP PROCEDURE IF EXISTS `sp_MasterDataPegawai`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_MasterDataPegawai`(
    IN p_IdPegawai CHAR(10),
    IN NIK CHAR(10),
    IN p_NamaLengkap VARCHAR(50),
    IN p_JenisKelamin CHAR(1),
    IN p_KdDivisi CHAR(3),
    IN p_KdJabatan CHAR(3),
    IN p_KdStatusAktif TINYINT(1),
    IN p_status CHAR(1),
    OUT OutputId VARCHAR(10)
    )
BEGIN
    /* ======Local variabel==========*/
    DECLARE pLoc_TempIdPegawai  VARCHAR(10);
    DECLARE pLoc_TempIdPegawai_i INTEGER;
    DECLARE i INTEGER;
    DECLARE pLoc_KdTitle CHAR(2);
    DECLARE pLoc_KdJenisPegawai CHAR(3);
    /*===============================*/

    IF p_JenisKelamin = 'L' THEN 
        SET pLoc_KdTitle = '01';
    ELSE
        SET pLoc_KdTitle = '02';
    END IF;

    SET pLoc_KdJenisPegawai = '001';

    SELECT pLoc_TempIdPegawai = `IdPegawai`,COUNT(*) FROM `tbl_data_pegawai` WHERE `IdPegawai` = p_IdPegawai;
    IF COUNT(*) = 0 THEN

            SELECT pLoc_TempIdPegawai_i = MAX(RIGHT(`IdPegawai`,6)) FROM `tbl_data_pegawai` WHERE `IdPegawai` <> '7777777777';
            IF pLoc_TempIdPegawai_i IS NULL THEN

                SET pLoc_TempIdPegawai = CONCAT(p_JenisKelamin,pLoc_KdJenisPegawai,'000001');

            ELSE

                SET i = RIGHT(pLoc_TempIdPegawai_i,6) + 1;
                SET pLoc_TempIdPegawai = CONCAT(p_JenisKelamin ,`fc_FormatNomor`(pLoc_KdJenisPegawai,3),fc_FormatNomor(i,6));
            END IF;


        INSERT INTO `tbl_data_pegawai`
            (
                `IdPegawai`,
                `NIK`,      
                `KdTitle`,
                `NamaLengkap`,
                `JenisKelamin`,
                `TempatLahir`,
                `Alamat`,
                `TglLahir`
            )
        VALUES  
            (
                pLoc_TempIdPegawai,
                p_NIK,
                pLoc_KdTitle,
                p_NamaLengkap,
                p_JenisKelamin,
                NULL,
                NULL,
                NULL
            );
        /*insert ke tabel tbl_data_current_pegawai */   
        INSERT INTO `tbl_data_current_pegawai`
            (
                `IdPegawai`,
                `KdJenisPegawai`,
                `KdJabatan`,
                `KdDivisi`,
                `KdAgama`,
                `KdPendidikan`,
                `StatusEnabled`
            )
        VALUES
            (
                pLoc_TempIdPegawai,
                pLoc_KdJenisPegawai,
                p_KdJabatan,
                p_KdDivisi,
                NULL,
                NULL,
                p_KdStatusAktif
            );


        SET OutputId = pLoc_TempIdPegawai;
--  else
        IF UPPER(p_Status)= 'A' THEN

            UPDATE `tbl_data_pegawai`
            SET
                `IdPegawai`=p_IdPegawai,        
                `KdTitle`=pLoc_KdTitle,
                `NamaLengkap`=p_NamaLengkap,
                `JenisKelamin`=p_JenisKelamin
            WHERE `IdPegawai`=p_IdPegawai AND `KdTitle`=pLoc_KdTitle;

            /* Update tbl_data_current_pegawai */
            UPDATE `tbl_data_current_pegawai`
            SET
                `IdPegawai`=p_IdPegawai,
                `KdJabatan`=p_KdJabatan,
                `KdDivisi`=p_KdDivisi,
                `StatusEnabled`=p_KdStatusAktif
            WHERE `IdPegawai`=p_IdPegawai;

        ELSE

            DELETE FROM `tbl_data_pegawai` WHERE `IdPegawai`=p_IdPegawai;
            DELETE FROM `tbl_data_current_pegawai` WHERE `IdPegawai`=p_IdPegawai;

            SET OutputId = p_IdPegawai;

        END IF;             
    END IF;
    END$$

DELIMITER ;

--==================================================================================

这个错误有多清楚? 对不起,因为我的英语不好。

谢谢

3 个答案:

答案 0 :(得分:2)

当我们将参数指定为OUT或INOUT时,存储过程应该能够对该参数进行操作。所以它希望参数是一个变量,调用者可以在以后使用它。如果我们指定VALUE,则存储过程无法操作该值,因此会抛出1414错误。

我们只能为存储过程的IN参数传递值。

因此,定义会话变量,然后将该变量作为参数发送。

答案 1 :(得分:1)

13.2.1 CALL Syntax

  

...

     

要使用OUT或INOUT参数从过程中获取值,   通过用户变量传递参数,然后检查   过程返回后变量的值。 (如果你打电话的话   从另一个存储过程或函数中的过程,你   也可以将例程参数或本地例程变量作为IN传递   或INOUT参数。)

     

...

尝试:

-- call `sp_MasterDataPegawai`('','0123555','neni','P','001','001',1,'',null)
call `sp_MasterDataPegawai`('','0123555','neni','P','001','001',1,'',@`_OutputId`);

答案 2 :(得分:0)

需要像这样在mysql中调用参数

call sp_MasterDataPegawai('','0123555','neni','P','001','001',1,'',@message);
select @message ;