AI智慧安防視訊EasyCVR平臺接入國標硬體裝置播放視訊失敗的原因排查與分析
阿新 • • 發佈:2022-03-28
MYSQL 儲存過程
儲存過程(Stored Procedure):在資料庫中儲存複雜程式,以便外部程式呼叫的一種資料庫物件。
優點:
- 儲存過程可封裝,並隱藏複雜的商業邏輯。
- 儲存過程可以回傳值,並可以接受引數。
- 儲存過程無法使用 SELECT 指令來執行,因為它是子程式,與查看錶,資料表或使用者定義函式不同。
- 儲存過程可以用在資料檢驗,強制實行商業邏輯等。
缺點:
- 儲存過程,往往定製化於特定的資料庫上,因為支援的程式語言不同。當切換到其他廠商的資料庫系統時,需要重寫原有的儲存過程。
- 儲存過程的效能調校與撰寫,受限於各種資料庫系統。
1. 儲存過程的建立與呼叫
- 儲存過程就是具有名字的一段程式碼,用來完成一個特定的功能。
- 建立的儲存過程儲存在資料庫的資料字典中。
/** 宣告語句結束符,可以自定義 **/ DELIMITER $$ 或 DELIMITER // /** 宣告儲存過程 **/ CREATE PROCEDURE demo_in_parameter(IN p_in int) /** 儲存過程開始和結束符號 **/ BEGIN .... END /** 變數賦值 **/ SET @p_in=1 /** 變數定義 **/ DECLARE l_int int unsigned default 4000000; /** 建立mysql儲存過程、儲存函式 **/ create procedure 儲存過程名(引數) /** 儲存過程體 **/ create function 儲存函式名(引數)
完整DEMO
mysql> delimiter $$ #將語句的結束符號從分號;臨時改為兩個$$(可以是自定義) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter; #將語句的結束符號恢復為分號
注意點:預設情況下,儲存過程和預設資料庫相關聯,如果想指定儲存過程建立在某個特定的資料庫下,那麼在過程名前面加資料庫名做字首。
儲存過程體:
- 儲存過程體包含了在過程呼叫時必須執行的語句,例如:dml、ddl語句,if-then-else和while-do語句、宣告變數的declare語句等
- 過程體格式:以begin開始,以end結束(可巢狀)
label1: BEGIN
label2: BEGIN
label3: BEGIN
statements;
END label3 ;
END label2;
END label1
標籤有兩個作用:
- 1、增強程式碼的可讀性
- 2、在某些語句(例如:leave和iterate語句),需要用到標籤
2. 儲存過程的引數
CREATE PROCEDURE 儲存過程名([[IN |OUT |INOUT ] 引數名 資料類形...])
- IN 輸入引數:表示呼叫者向過程傳入值(傳入值可以是字面量或變數)
- OUT 輸出引數:表示過程向呼叫者傳出值(可以返回多個值)(傳出值只能是變數)
- INOUT 輸入輸出引數:既表示呼叫者向過程傳入值,又表示過程向呼叫者傳出值(值只能是變數)
注意點:
1、如果過程沒有引數,也必須在過程名後面寫上小括號:
CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ……
2、確保引數的名字不等於列的名字,否則在過程體中,引數名被當做列名來處理
建議:
- 輸入值使用in引數。
- 返回值使用out引數。
- inout引數就儘量的少用。
3. 變數
3.1 變數定義
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
// 舉例
DECLARE l_int int unsigned default 4000000;
DECLARE l_numeric number(8,2) DEFAULT 9.95;
DECLARE l_date date DEFAULT '1999-12-31';
DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';
DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';
3.2 變數賦值
SET 變數名 = 表示式值 [,variable_name = expression ...]
3.3 使用者變數
mysql > SELECT 'Hello World' into @x;
mysql > SELECT @x;
+-------------+
| @x |
+-------------+
| Hello World |
+-------------+
mysql > SET @y='Goodbye Cruel World';
mysql > SELECT @y;
+---------------------+
| @y |
+---------------------+
| Goodbye Cruel World |
+---------------------+
mysql > SET @z=1+2+3;
mysql > SELECT @z;
+------+
| @z |
+------+
| 6 |
+------+
注意點:
- 1、使用者變數名一般以@開頭
- 2、濫用使用者變數會導致程式難以理解及管理
4. 註釋
- 單行註釋:--
- 多行註釋:C風格
- 查詢儲存過程
selectname from mysql.proc where db='資料庫名';
selectroutine_name from information_schema.routines where routine_schema='資料庫名';
showprocedure status where db='資料庫名';
- 查詢儲存過程詳細資訊
SHOWCREATE PROCEDURE 資料庫.儲存過程名;
- 修改儲存過程
ALTER PROCEDURE
- 刪除儲存過程
DROP PROCEDURE
引用: