2013-11-02 3 views
0

입력 변수를 기반으로 레코드를 삽입하거나 업데이트하는 저장 프로 시저를 만들려고합니다. 그러나 SP를 컴파일하려고하면 다음과 같이 알려줍니다 : 코드 1064, SQL 구문에 오류가 있습니다. 해당 구문을 사용하여 MySQL 서버 버전에 해당하는 올바른 구문을 사용하여 80 줄 근처에서 사용하십시오. 그리고 솔루션을 찾지 못했습니다. 당신이 저에게 줄 수있는 도움에 대해 대단히 감사합니다.MySQL에서 삽입 업데이트를위한 저장 프로 시저 만들기

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 IFIF-statements을 완료해야 다음과 같이

내 SP 코드입니다.

또한 테스트 중 하나는 id_setup과 id_setup 사이에 있습니다. id_setup과 i_id_setup 사이 여야합니다.

+0

와우, 간단하게, 대단히 감사합니다, 완벽하게 일했습니다. 나는 이것에 매달리는 시간이 있었다. 토요일 날 구해 줬어! – 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()을 쓰면 열 이름을 쓰십시오.

내가는 과정 내에서 id, name, salary했다 또한 내가 update table_NAME set name=name, salary=salary where id=id입니다 간단한 쿼리를 쓴 후 모든 유형을 제공합니다. 왜냐하면 나는이 이드의 이름과 급여를 바꾸기를 원하기 때문이다. 지금 당신이 사용합니다.

관련 문제