Coa*_*ohn 17 mysql stored-procedures
我想知道如何DROP TABLE IF EXISTS
在MySQL存储过程中使用.我正在编写一个相当长的mySQL存储过程,它将执行大量工作,然后加载带有结果的临时表.但是,我无法完成这项工作.
我已经看到了几种方法来做临时表的事情.基本上,您要么创建临时表,要对其进行处理,然后将其放在最后...或者如果它存在则将其删除,创建它,然后对其进行处理.
我更喜欢第二种方法,所以你总是开始干净,这是对表存在的内置检查.但是,我似乎无法让它工作:
这是我的例子:
这个作品:
DELIMITER//
DROP PROCEDURE IF EXISTS pTest//
CREATE PROCEDURE pTest()
BEGIN
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
DROP TEMPORARY TABLE tblTest;
END//
DELIMITER ;
CALL pTest();
Run Code Online (Sandbox Code Playgroud)
这个作品:
DELIMITER//
DROP PROCEDURE IF EXISTS pTest//
CREATE PROCEDURE pTest()
BEGIN
DROP TEMPORARY TABLE tblTest;
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
END//
DELIMITER ;
CALL pTest();
Run Code Online (Sandbox Code Playgroud)
这不是:
DELIMITER//
DROP PROCEDURE IF EXISTS pTest//
CREATE PROCEDURE pTest()
BEGIN
DROP TEMPORARY TABLE IF EXISTS tblTest;
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
END//
DELIMITER ;
CALL pTest();
Run Code Online (Sandbox Code Playgroud)
前两个工作,但如果该表存在(如果该过程没有完成或某事),它显然会以"表tblTest不存在"错误结束.我正在寻找的非工作示例 - 如果它在那里删除表,然后重新创建它,以便我可以开始清理.
感觉就像是"IF EXISTS"让这件事失败了.我从各种非常相似的网站复制了代码,在任何情况下我都无法获得"DROP TABLE IF EXISTS ...".永远.
开发服务器:mySQL服务器版本:5.1.47-community Prod服务器:mySQL服务器版本:5.0.45-log
我们无法更改数据库版本(DBA不会允许它),所以我坚持我所拥有的.这是mySQL或程序中的错误吗?
谢谢.
Iva*_*anD 17
这是一个老问题,但它出现了,因为我正在寻找DROP TABLE IF EXISTS.
您的非工作代码无法在我的MySQL 5.1.70服务器上运行.
我所要做的就是在第一行的DELIMITER和//之间添加一个空格,一切正常.
工作代码:
DELIMITER //
DROP PROCEDURE IF EXISTS pTest//
CREATE PROCEDURE pTest()
BEGIN
DROP TEMPORARY TABLE IF EXISTS tblTest;
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
END//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我不知道为什么这对您不起作用,但您应该能够使用继续处理程序来解决该问题。如果您将DROP TABLE
声明放入其自己的声明中BEGIN...END
块中,则可以使用继续处理程序来忽略该错误(如果该表不存在)。
尝试这个:
DELIMITER //
DROP PROCEDURE IF EXISTS pTest //
CREATE PROCEDURE pTest()
BEGIN
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' BEGIN END;
DROP TEMPORARY TABLE tblTest;
END;
CREATE TEMPORARY TABLE tblTest (
OrderDate varchar(200)
);
END //
DELIMITER ;
CALL pTest();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
66761 次 |
最近记录: |