[英]Creating a Stored Procedure in MySQL with C#
我正在尝试使用以下代码以编程方式创建新的存储过程:
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
using (MySqlTransaction trans = conn.BeginTransaction())
{
using (MySqlCommand command = conn.CreateCommand())
{
command.CommandText = query;
command.ExecuteNonQuery();
}
trans.Commit();
}
}
并将以下文本作为从MySQL工作台复制的create语句:
static string query = @"
delimiter $$
CREATE PROCEDURE `GetParentIds`(IN `tempTableName` VARCHAR(255), IN `id` int)
BEGIN
DECLARE parId INT;
DECLARE curId INT;
DROP TEMPORARY TABLE IF EXISTS tempTableName;
CREATE TEMPORARY TABLE tempTableName (
node_id INT NOT NULL PRIMARY KEY
);
set curId := id;
get_parents_loop: LOOP
set parId := null;
set parId = (select ParentID from {TableName} where ID = curId);
IF parId is NULL THEN
LEAVE get_parents_loop;
END IF;
INSERT INTO tempTableName(node_id) Values (parId);
set curId := parId;
END LOOP get_parents_loop;
SELECT *
FROM tempTableName;
END$$";
向该过程传递一个具有parentID的对象的ID,并获取给定对象的所有父对象的所有parentID并返回它们。 当我尝试运行它时出现问题,并且收到以下消息:“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以找到在'delimiter $$附近使用正确的语法。
创建过程GetParentIds
(在tempTableName
VARCHAR(255)中,在第1行“
欢迎任何想法!
*编辑**由于以下所有答案,这终于可以了:
CREATE PROCEDURE GetParentIds(IN tempTableName VARCHAR(255), IN id int)
BEGIN
DECLARE parId INT;
DECLARE curId INT;
DROP TEMPORARY TABLE IF EXISTS tempTableName;
CREATE TEMPORARY TABLE tempTableName (node_id INT NOT NULL PRIMARY KEY );
set curId := id;
get_parents_loop: LOOP
set parId := null;
set parId = (select ParentID from TDOs where TDOID = curId);
IF parId is NULL THEN
LEAVE get_parents_loop;
END IF;
INSERT INTO tempTableName(node_id) Values (parId);
set curId := parId;
END LOOP get_parents_loop;
SELECT *
FROM tempTableName;
END;
删除DELIMITER $$
开头和$$
过去后END
DELIMITER
是mysql客户端命令 ,可让您在定义存储例程时临时更改其语句终止符。
如果要在不使用分号作为语句终止符的编程接口内定义存储的例程,则存储的例程定义中的分号不会出现任何特殊问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.