在MYSQL中编写存储过程的困难

Posted

技术标签:

【中文标题】在MYSQL中编写存储过程的困难【英文标题】:Difficulty in writing Stored Procedure in MYSQL 【发布时间】:2013-07-11 18:34:42 【问题描述】:

我的存储过程的代码是:

CREATE PROCEDURE insert_sait_inf(IN name TEXT,IN title TEXT,IN link TEXT)

BEGIN

INSERT INTO sait_inf(sait_name,sait_title,sait_link) VALUES (name,title,link);

END

但错误是:

  #1064 - You have an error in your SQL syntax; check the manual that  corresponds to your mysql server version for the right syntax to use  near '' at line 3 

【问题讨论】:

【参考方案1】:

如Defining Stored Programs 中所述:

如果您使用mysql 客户端程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql 本身将分号识别为语句分隔符,因此您必须临时重新定义分隔符以使 mysql 将整个存储的程序定义传递给服务器。

phpMyAdmin 也是如此。

要重新定义mysql 分隔符,请使用delimiter 命令。

并非所有版本的 phpMyAdmin 都能识别delimiter 命令;相反,可以使用 SQL 输入框下方的Delimiter 输入框:参见How do I write an SP in phpMyAdmin (MySQL)?

以下是一个函数示例,该函数接受一个参数,使用 SQL 函数执行操作并返回结果。在这种情况下,没有必要使用delimiter,因为函数定义不包含内部;语句分隔符:

mysql> CREATE FUNCTION hello (s CHAR(20)) mysql> RETURNS CHAR(50) DETERMINISTIC -> RETURN CONCAT('Hello, ',s,'!'); 查询正常,0 行受影响(0.00 秒)

在您的情况下,您可以删除 BEGIN ... END 复合语句块并避免更改分隔符。

【讨论】:

如果BEGIN ... END命令稍后删除php时两个或多个SP SP只调用第一个工作

以上是关于在MYSQL中编写存储过程的困难的主要内容,如果未能解决你的问题,请参考以下文章

mysql 存储过程简介

Mysql存储过程编写

mysql 存储过程总结(一)

mysql存储过程编写-入门案例-遁地龙卷风

MySQL数据库的存储过程

MYSQL存储过程注释详解