1. 程式人生 > >MySQL的一個儲存過程

MySQL的一個儲存過程

/* 刪除掉已存在同名儲存過程*/
drop procedure if exists proc_trans_cmheader_data; 
/* 預設情況下,delimiter是分號“;”。
在命令列客戶端中,如果有一行命令以分號結束,
那麼回車後,mysql將會執行該命令。
但有時候,不希望MySQL這麼做。因為可能輸入較多的語句,且語句中包含有分號。
預設情況下,不可能等到使用者把這些語句全部輸入完之後,再執行整段語句。
因為mysql一遇到分號,它就要自動執行。
這種情況下,就可以使用delimiter,把delimiter後面換成其它符號,如//或$$。
此時,delimiter作用就是對整個小段語句做一個簡單的封裝。
此命令多用在定義子程式,觸發程式等mysql自己內嵌小程式中。*/
delimiter | 
CREATE PROCEDURE proc_trans_cmheader_data (
  in_start_date VARCHAR(64),
  in_end_date VARCHAR(64)
)


BEGIN
 declare start_date VARCHAR(64);
 declare end_date VARCHAR(64);


 SET start_date = in_start_date;
 SET end_date = in_end_date;


 start transaction; 




 /* 放入備份表中*/
 INSERT INTO cm_header_20140929  SELECT * FROM cm_header c WHERE  c.created_time > start_date AND c.created_time < end_date;
  
 /* 刪除已經存在的待發表中的資料*/
  DELETE FROM ebdc_db.cm_header  WHERE ebdc_db.cm_header.id IN (SELECT id FROM ebdc_db.cm_header_20140929);


 commit; 


end;