2009-12-12 49 views
2

我想在mysql管理员中创建存储过程。我在POWWEB.com上托管一个网站。为此,我试图在mysqladmin中创建存储过程。在mysqladmin中创建存储过程?

Mysql版本是5.0.45。我可以用一行代码创建一个存储过程。

CREATE PROCEDURE TEST(input INT) 
    INSERT INTO TEST(COL1) VALUES(input); 

但是这是没有用的。我想用更多的命令编写一个存储过程。所以我尝试像

CREATE PROCEDURE TEST(input INT) 
BEGIN 
    INSERT INTO TEST(COL1) VALUES(input); 
    INSERT INTO TEST1(COL1) VALUES(input); 
    INSERT INTO TEST2(COL1) VALUES(input); 
END 

但是这给了一个语法错误。但是相同的代码在我的本地机器上工作正常。 请让我知道如果你有任何想法如何解决这个问题。任何帮助或建议,不胜感激。

回答

2

默认分隔符是;,所以它将代码解释为多个查询,这显然不起作用。尝试这样的:

delimiter // 
CREATE PROCEDURE TEST(input INT) 
BEGIN 
    INSERT INTO TEST(COL1) VALUES(input); 
    INSERT INTO TEST1(COL1) VALUES(input); 
    INSERT INTO TEST2(COL1) VALUES(input); 
END// 
+0

DELIMITER //给出错误。有没有其他选择。 – Vinodtiru 2009-12-12 11:26:05

+0

什么错误?这对我来说可以。 – 2009-12-12 11:27:20

+0

你的SQL查询似乎有错误。下面的MySQL服务器的错误输出,如果有任何,也可以帮助你诊断问题 错误:未知的标点符号字符串@ 11 STR:// SQL://分隔符 CREATE PROCEDURE TEST(输入INT) BEGIN INSERT INTO TEST(COL1)VALUES(input); SQL查询: 定界符// CREATE PROCEDURE TEST(input INT)开始插入测试(COL1)VALUES(input); MySQL说: #1064 - 你的SQL语法错误;检查与你的MySQL服务器版本相对应的手册,在正确的语法附近使用'delimiter // CREATE PROCEDURE TEST(输入INT) BE – Vinodtiru 2009-12-12 11:36:51

1

忽略PHPMyAdmin,它是像摩托车烟灰缸一样没用。登录到您的shell并使用mysql命令行界面,这是脚本化mysql唯一可支持的正确方式。

DELIMITER命令不是mysql服务器命令,它是一个mysql命令行客户端命令。要使用它,你必须使用适当的mysql命令行客户端。

否则很难(虽然不是不可能)创建存储过程。

+0

无法投票足够高。浪费了一个小时,试图让它在phpmyadmin上工作 – Pasta 2012-02-14 10:23:14

+0

它并不明显,但是(至少在phpmyadmin v4.0.4.1中)带有多个查询的存储过程在将'BEGIN'''' END'块放在其周围时工作正常。 – 2014-03-20 09:50:56

1

在phpMyAdmin中,在SQL编辑器中,可以在标记为“分隔符”的表单字段中设置分隔符。这是默认的。将它设置为你喜欢的任何东西,不要在你的SQL中键入分隔符,但是以分隔符END结束sql,END //其中//是你选择的分隔符。

1

最好的答案就是@巴里的评论:

Stored procedures with multiple queries work fine when putting a BEGIN .. END block around it. – Barry Staes

另外,;在每个查询结束。

例如:

BEGIN 
    INSERT INTO passenger (fname,lname,tel,ID,sex) 
    VALUES (fname,lname,tel,ID, sex); 
    INSERT INTO passenger 
    select * from reservation where 1; 
END