MySql INSERT过程

时间:2011-05-12 10:59:29

标签: mysql stored-procedures insert

我是MySql的新手,我的存储过程有问题。我正在尝试为插入创建一个新的sp:

CREATE DEFINER = CURRENT_USER PROCEDURE 
`NewProc`
(
    IN `PCountryId` binary(16),
    IN `PCountryName` varchar(50),
    IN `PCountryLongitude` float,
    IN `PCountryLatitude` float
)
BEGIN
    INSERT INTO 
        country
        (
            CountryId,
            CountryName,
            CountryLongitude,
            CountryLatitude
        )
    VALUES
        (
            PCountryId,
            PCountryName,
            PCountryLongitude,
            PCountryLatitude
        )
END;

但是当我尝试运行时我得到了这个错误:

  

[Err] 1064 - 你的错误   SQL语法;检查手册   对应于您的MySQL服务器   用于正确语法的版本   在第25行'END'附近

你能帮我解决这个问题吗?

谢谢

修改

当我删除定义者时

DEFINER = CURRENT_USER

它工作正常。

2 个答案:

答案 0 :(得分:0)

默认DEFINER值为CURRENT_USER。

MySQL 5.0手册12.1.9。:

  

如果您没有SUPER   特权,唯一的合法用户价值   是您指定的帐户   字面上或使用CURRENT_USER。   您无法将定义器设置为某些定义器   其他帐户。

答案 1 :(得分:0)

存储过程中的分隔符必须与当前分隔符不同,因此您必须编写如下过程:

(免责声明:我没有测试您的程序,因此可能存在其他适用的问题)

DELIMITER $$
DROP PROCEDURE IF EXISTS NewProc $$
CREATE DEFINER = CURRENT_USER PROCEDURE 
`NewProc`
(
    IN `PCountryId` binary(16),
    IN `PCountryName` varchar(50),
    IN `PCountryLongitude` float,
    IN `PCountryLatitude` float
)
BEGIN
    INSERT INTO 
        country
        (
            CountryId,
            CountryName,
            CountryLongitude,
            CountryLatitude
        )
    VALUES
        (
            PCountryId,
            PCountryName,
            PCountryLongitude,
            PCountryLatitude
        );
END $$

DELIMITER ;