在MySQL Workbench这个位置使用无效输入

时间:2015-06-12 09:23:58

标签: mysql sql stored-procedures mysql-workbench

我试图在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'

的所有数据

任何人都可以帮助我。

非常感谢您的帮助

2 个答案:

答案 0 :(得分:2)

当您使用对象编辑器(在架构树的上下文菜单中选择“创建存储过程...”时获得)时,您不需要添加所有装饰。只需编写存储过程而不使用USE,DELIMITER和DROP。应用更改时,您将看到My​​SQL Workbench会自动为您创建一个USE命令(具体取决于您单击哪个模式来触发SP编辑器)。您应该在再次创建SP之前手动删除现有SP。

如果您使用SQL编辑器,那么您需要所有装饰。

答案 1 :(得分:2)

虽然这是一个老问题,但没有看到答案,但我设法解决了同样的问题。

文件可能保存为带有BOM的UTF8(或者内容是从这样的文件中复制的)。

在这种情况下,尝试以UTF8格式保存文件(不含BOM),然后重新运行代码。

对我而言,它解决了同样的问题。

注意: 1)您可以使用Notepadd ++更改编码。 2)请注意,BOM是字节顺序标记的首字母缩写,它是文件开头的一个短字节序列,用于标记文件的编码。