我试图在MySQL Workbench中创建存储过程:
USE `data_p`;
DROP PROCEDURE IF EXISTS `Product`;
DELIMITER $$
USE `data_p`$$
CREATE DEFINER=`data_s_admin`@`...` PROCEDURE `Product`(
INOUT d_id INT,
INOUT d_fk_c INT,
INOUT d_s VARCHAR(255),
INOUT d_p DECIMAL,
INOUT d_c_a DATE,
INOUT d_o_p DECIMAL,
INOUT d_s_c DECIMAL,
INOUT d_x_s VARCHAR(20),
INOUT d_d_w VARCHAR(20),
INOUT d_fk_c_a INT,
INOUT d_s enum('ac','in','de')
)
BEGIN
DECLARE cs_id INT;
DECLARE cs_fk_c INT;
DECLARE cs_s VARCHAR(255);
DECLARE cs_p DECIMAL;
DECLARE cs_c_a DATE;
DECLARE cs_o_p DECIMAL;
DECLARE cs_s_c DECIMAL;
DECLARE cs_x_s VARCHAR(20);
DECLARE cs_d_w VARCHAR(20);
DECLARE cs_fk_c_a INT;
DECLARE cs_s enum('ac','in','de');
SELECT
d_id ,
d_fk_c ,
d_s,
d_p ,
d_c_a ,
d_o_p ,
d_s_c ,
d_x_s,
d_d_w,
d_fk_c_a,
d_s
)
INTO
cs_id,
cs_fk_c,
cs_s,
cs_p,
cs_c_a,
cs_o_p,
cs_s_c,
cs_x_s,
cs_d_w,
cs_fk_c_a,
cs_s
FROM
data_p.cas
WHERE
cs_s = d_s AND cs_s = 'ac';
END $$
DELIMITER ;
当我点击data_s ==>存储过程,我创建新的存储过程,然后我粘贴此代码, 我的错误是: 语法错误:' USE'在此位置无效输入 语法错误:IF:此位置意外
有什么问题?我真的想解决这个问题,知道受影响的行数
我在数据库' data_s'中创建了我的存储过程。然后我返回来自' data_p'
的所有数据任何人都可以帮助我。
非常感谢您的帮助
答案 0 :(得分:2)
当您使用对象编辑器(在架构树的上下文菜单中选择“创建存储过程...”时获得)时,您不需要添加所有装饰。只需编写存储过程而不使用USE,DELIMITER和DROP。应用更改时,您将看到MySQL Workbench会自动为您创建一个USE命令(具体取决于您单击哪个模式来触发SP编辑器)。您应该在再次创建SP之前手动删除现有SP。
如果您使用SQL编辑器,那么您需要所有装饰。
答案 1 :(得分:2)
虽然这是一个老问题,但没有看到答案,但我设法解决了同样的问题。
文件可能保存为带有BOM的UTF8(或者内容是从这样的文件中复制的)。
在这种情况下,尝试以UTF8格式保存文件(不含BOM),然后重新运行代码。
对我而言,它解决了同样的问题。
注意: 1)您可以使用Notepadd ++更改编码。 2)请注意,BOM是字节顺序标记的首字母缩写,它是文件开头的一个短字节序列,用于标记文件的编码。