在SqlFiddle上执行触发器存储过程。MySQL

18

SQL-fiddle能够执行触发器/存储过程吗?

我甚至无法在sqlfiddle上执行最简单的存储过程。

DELIMITER $$
DROP PROCEDURE IF EXISTS myProc $$

CREATE PROCEDURE myProc()
BEGIN

END$$
DELIMITER ;

在 Sqlfiddle 中无法执行上述 SQL 语句,但可以执行类似创建表之类的操作。

注意:我在使用 MySQL 5.5.24 版本的 WAMP 环境时,这个语法是可行的。

请问有人能指导一下吗?

2个回答

46

不要使用定界符选项(它不是真正的SQL语句,而只是mysql命令提示符的命令),而是使用SQL Fiddle上的"查询终止符"选项来建立您的定界符。

例如:

http://sqlfiddle.com/#!2/88fcf

请注意模式框下方的//下拉菜单?那是 SQL Fiddle 的等效于 mysql DELIMITER 命令。

在存储过程中使用查询的更长示例(请注意,在存储过程内,;仍然用作分隔符):

http://sqlfiddle.com/#!9/4db78

完整披露:我是SQL Fiddle的作者。


9
让我再次借此机会感谢你提供的非常棒的SQL Fiddle。你太厉害了!继续保持… - Leniel Maccaferri
3
@LenielMacaferi 哈哈,谢谢!很高兴你喜欢这个网站。继续在 SQL 问题上保持好的工作! - Jake Feasel
@Konerak,感谢你提供的示例,非常有帮助! - ocean800
1
@Konerak 看起来使用 MySQL 5.6 时停止工作并显示错误:DDL 和 DML 语句不允许在 MySQL 的查询面板中使用;只允许使用 SELECT 语句。将 DDL 和 DML 放入模式面板中。我正在使用您发送的示例 http://sqlfiddle.com/#!2/e5a27/3 。还有一个关于此问题的葡萄牙语线程 https://pt.stackoverflow.com/questions/380029/erro-ao-realizar-chamada-de-procedure-no-sql-fiddle。 - Rafael Gorski

0

我在sql fiddle上无法使这个答案工作,但是我找到了db-fiddle,并且它似乎可以工作。

DB Fiddle中的示例

如果以上出现问题,请执行以下操作

去这里:https://www.db-fiddle.com/ 在左侧输入以下SQL,并在右侧输入SELECT * FROM tblTest;
在下拉菜单中选择"MySql 5.7"或其他版本。
点击"Run"
 DELIMITER //

 CREATE TABLE tblTest (col1 INT)//

 INSERT INTO tblTest VALUES (9)//

 CREATE PROCEDURE dowhile() 
 BEGIN   
   DECLARE v1 INT DEFAULT 3;

   WHILE v1 > 0 DO
     INSERT INTO tblTest VALUES(v1);
     SET v1 = v1 - 1;   
   END WHILE; 
 END//

 INSERT INTO tblTest VALUES (8)//

 select * from tblTest// 
 call dowhile()// 
 select * from tblTest// 

 DELIMITER ;

你能否简化它,通过在 CREATE PROCEDURE dowhile() 行之前定义分隔符,例如 DELIMITER // CREATE PROCEDURE dowhile() ,并在过程定义完成后立即结束它,例如 END// DELIMITER ; - Sami
除了创建过程语句之外,您可以在所有其他语句中使用正常的; - Sami
嗨,我有一个问题,它出现了错误,链接是 https://www.db-fiddle.com/f/7iPdu4Hdzs7S8dAHeRN6TT/4 - Chris Habgood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接