存儲過程格式


DELIMITER ||| /*定義結束符*/

DROP PROCEDURE IF EXISTS `test` ||| /*刪除存儲過程如果存在*/

CREATE PROCEDURE `test`(
IN Id INT UNSIGNED,  -- 傳入參數

OUT ReturnValue VARCHAR(32), -- 傳出參數,定義為錯誤碼
OUT ReturnMessage VARCHAR(1024) -- 傳出參數,定義為運行流程

)

MODIFIES SQL DATA
SQL SECURITY INVOKER
COMMENT '測試'
Main : BEGIN /*主體內容開始*/
/*定義狀態*/
DECLARE SYSError INT DEFAULT 0;
DECLARE SYSEmpty INT DEFAULT 0;

/*局部變量*/
DECLARE V1  VARCHAR(128) DEFAULT '';
DECLARE V2  INT UNSIGNED DEFAULT 0;
DECLARE V3  TINYINT UNSIGNED DEFAULT 0;
DECLARE V4 NUMERIC(16,4) DEFAULT 0.0;
/* 聲明異常處理(定義系統錯誤),必須放在變量定義之后*/

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET SYSError = 1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET SYSEmpty = 1;

/* 初始化變量*/

-- 存儲過程中的變量賦值為 SET
SET ReturnValue = '';
SET ReturnMessage = '測試開始;

 

-- 開啟事務

START TRANSACTION;

  SELECT price INTO V1 WHERE `id` = Id;

  IF SYSEmpty = 1 THEN 

    SET ReturnValue = 'E_SELECT';

    SET ReturnMessage = CONCAT(ReturnMessage ,'->','沒找到');

    LEAVE Main;

    ROLLBACK;

  END IF;

COMMIT;

SET ReturnValue = 'OK';
SET ReturnMessage = CONCAT(ReturnMessage,'->','完畢');
END |||
DELIMITER ;

 存儲過程調用 : 

CALL  test(ID,@V,@M);

SELECT @V,@M;

CALL 是存儲過程的調用,在調用時,需要把所有的參數都寫進去,輸入和輸出。輸出參數前 + @ 符號。

下面的 SELECT 語句是拿到輸出參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM