首页 > 解决方案 > MySQL存储过程:如果表存在则删除条目

问题描述

我创建了一个存储过程,它应该从某些表中删除数据。

在我的生产数据库上,我有本地数据库中没有的表(不同的模式名称)。

是否有一种优雅的方式来查询数据表的存在以避免异常?也许声明一个错误处理程序来捕获特定错误并应该继续。

CREATE PROCEDURE `deletion`(IN s_id varchar(255))
BEGIN   
    DECLARE has_error BOOL DEFAULT FALSE;
    /* for all other exception there should be a rollback, if table does not exist
        then continue*/
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET has_error = TRUE; 

START TRANSACTION;

DELETE FROM a WHERE id = s_id;
DELETE FROM b WHERE id = s_id;
DELETE FROM c WHERE id = s_id;
DELETE FROM d WHERE id = s_id;

IF has_error THEN
  ROLLBACK;
 ELSE
  COMMIT;
END IF;

END

更新

我试过这个,但这不起作用。即使表存在,条目也不会被删除:

 IF EXISTS (SELECT 1 from information_schema.tables 
    WHERE table_schema = 'a' ) then
        DELETE FROM at WHERE id = s_id; 
    END IF;

提前致谢!

标签: mysqlstored-procedurespsql

解决方案


推荐阅读