2013-11-02 43 views
0

我试图创建一个存储过程来插入或更新基于输入变量的记录。但是,当我尝试编译SP时,只会告诉我以下内容:代码1064,您的SQL语法中有错误,请检查与您的MySQL服务器版本相对应的手册,以获取在80行附近使用的正确语法。我还没有找到解决方案。非常感谢你给我的任何帮助。在Mysql中创建插入更新的存储过程

我的SP代码如下:

DELIMITER $$ 

CREATE PROCEDURE `sp_sertup`(IN i_operation CHAR(1), 
         IN i_system VARCHAR(20), 
         IN i_subsystem VARCHAR(20), 
         IN i_ref VARCHAR(20), 
         IN i_significance VARCHAR(20), 
         IN i_rank VARCHAR(20), 
         IN i_implication VARCHAR(20), 
         IN i_loc1 VARCHAR(20), 
         IN i_loc2 VARCHAR(20), 
         IN i_task VARCHAR(20), 
         IN i_time VARCHAR(20), 
         IN i_cost1 VARCHAR(20), 
         IN i_cost2 VARCHAR(20), 
         IN i_note VARCHAR(20), 
         IN i_attach VARCHAR(20), 
         IN i_operation_text VARCHAR(20), 
         IN i_id_setup INT) 

BEGIN 
    IF (i_operation = 'I') THEN 
     UPDATE setup_gs SET setup_status = 0 WHERE id_setup = id_setup; 

      INSERT INTO setup_gs(
       SystemLabel, 
       SubsystemLabel, 
       RefLabel, 
       SignificanceLabel, 
       RankLabel, 
       ImplicationLabel, 
       Location1Label, 
       Location2Label, 
       TaskLabel, 
       TimeLabel, 
       Cost1Label, 
       Cost2Label, 
       NoteLabel, 
       attachmentText, 
       OperationsText, 
       setup_status 
      ) 
      VALUES 
      (
       i_system, 
       i_subsystem, 
       i_ref, 
       i_significance, 
       i_rank, 
       i_implication, 
       i_loc1, 
       i_loc2, 
       i_task, 
       i_time, 
       i_cost1, 
       i_cost2, 
       i_note, 
       i_attach, 
       i_operation_text, 
       1); 

    IF (i_operation = 'U') THEN 
     UPDATE 
      setup_gs 
     SET 
      SystemLabel  = values(i_system), 
      SubsystemLabel  = values(i_subsystem), 
      RefLabel   = values(i_ref), 
      SignificanceLabel = values(i_significance), 
      RankLabel   = values(i_rank), 
      ImplicationLabel = values(i_implication), 
      Location1Label  = values(i_loc1), 
      Location2Label  = values(i_loc2), 
      TaskLabel   = values(i_task), 
      TimeLabel   = values(i_time), 
      Cost1Label   = values(i_cost1), 
      Cost2Label   = values(i_cost2), 
      NoteLabel   = values(i_note), 
      attachmentText  = values(i_attach), 
      OperationsText  = values(i_operation_text), 
      setup_status  = 1 
     WHERE id_setup   = i_id_setup;   
END $$ 
DELIMITER ; 

回答

0

您必须在MySQL END IF完成你IF-statements

此外,您的一个测试是在id_setup和id_setup之间。它应该在id_setup和i_id_setup之间。

+0

Wao,那简单,非常感谢,非常完美。我有几个小时在这附近徘徊。你星期六救了我! – oraguilinux

+0

NP,欢迎来到SO!如果您同意,请记住投票给您喜欢的任何答案,并在最好的答案上检查该答案。 –

-1

如果您想创建更新存储过程,请在mysql命令行中执行以下步骤。它是完美的工作。

create procedure procedure_name(id int, name varchar(40),salary float) 
         update table_name set name=name,salary=salary from id=id; 

首先您需要创建一个表格。之后写入关键字create procedure,之后写入procedure_name()里面的过程函数写入列名。

我拿了idnamesalary的过程中,还提供所有后的类型,我写了简单的查询是update table_NAME set name=name, salary=salary where id=id。因为我想改变这个ID的名字和工资。现在你使用。