作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当且仅当 table_1
中存在特定列时,我需要插入来自 SELECT
结果集的 table_2
值,然后该列必须从 table_1
中删除。否则什么都不会发生。
这都是关于DELIMITER
吗?
据我所知,不,因为代码不是过程声明的一部分。无论如何我尝试了一下,但似乎没有帮助。运行这么小的任务变得很棘手。
到目前为止,我的代码会触发来自 Workbench 的语法错误警告:
CASE
-- MysqlWorkbench complains (CASE is underlined) saying …
-- «Syntax error: 'CASE (case) is not valid input at this position'»
WHEN EXISTS (
SELECT * FROM information_schema.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'bd_name'
AND `TABLE_NAME` = 'table_1'
AND `COLUMN_NAME` = 'name'
) THEN
INSERT INTO table_2 (caption,c_id)
SELECT DISTINCT label, c_id FROM bd_name.table_1;
ALTER TABLE table_1 DROP COLUMN label;
-- I'm not sure about how should I separate statements
-- regarding https://dev.mysql.com/doc/refman/5.7/en/case.html
END;
-- ("END" is underlined) Syntax error: extraneous input found - expected end of input
谢谢。
最佳答案
我认为 MySQL 不允许在例程、触发器、事件等之外进行过程构造...解决此问题的一种方法是将代码包装在 proc 声明中,然后在其后面调用 proc 和过程的一滴。
类似这样的事情:
DELIMITER $$
CREATE PROCEDURE foo()
BEGIN
Your stuff here;
and here;
END$$
DELIMITER ;
CALL foo();
DROP PROCEDURE foo();
关于mysql - 使用 CASE WHEN 在过程外部执行 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45622447/
我是一名优秀的程序员,十分优秀!