DELIMITER ||| /*定義結束符*/測試
DROP PROCEDURE IF EXISTS `test` ||| /*刪除存儲過程若是存在*/事務
CREATE PROCEDURE `test`(
IN Id INT UNSIGNED, -- 傳入參數test
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 語句是拿到輸出參數。