數據庫系統原理第五章

第五章 數據庫編程

**大家想一起學習交流的可以加羣,WX:MrCroods。**

第一節 存儲過程

一、存儲過程的基本概念

(1)、存儲過程是一組SQL語句集,可以由聲明式的SQL語句和過程式SQL語句組成。
(2)、存儲過程的優點:(簡單題

1、可增強SQL語言的功能和靈活性
2、良好的封裝性(可被重複調用,且不影響其他的應用程序。)
3、高性能(存儲過程執行一次後,其執行規劃就駐留在高速緩衝存儲器中。)
4、可減少網絡流量(由於存儲過程在服務器端運行,網絡中傳送的只是該調用語句。)
5、存儲過程可作爲一種安全機制來確保數據庫的安全性和數據的完整性。

二、創建存儲過程

(1)、修改結束符:DELIMITER
l例子:
mysql> DELIMITER !!
mysql>
CREATE PROCEDURE sp_update_sex(存儲過程名字)(IN cid INT,IN csex CHAR(1))
BEGIN
UPDATE customers SET cust_sex = csex WHERE cust_id = cid;
END !!

三、存儲過程體

(1)、聲明局部變量
DECLARE cid INT(10);

1、局部變量注意事項:
局部變量只能在存儲過程體的BEGIN…END語句塊中聲明。
局部變量必須在開頭聲明。
局部變量的作用範圍僅限於BEGIN…END語句塊中。
局部變量不同於用戶變量,直接使用不需要在前面使用@符號
2、局部變量的作用:用來存儲臨時結果

(2)、局部變量賦值
SET cid = 910;

(3)、SELECT…INTO
SELECT col_name(列名) INTO var_name(變量名)table_expr(FROM後面的語法)

(4)、流程控制語句

1、條件判斷語句
IF…THEN…ELSE語句
CASE語句

2、循環語句
WHILE、REPEAT、LOOP循環語句
ITERATE語句用於退出當前循環,且重新開始一個循環。

(5)、遊標(選擇題、填空題

遊標的定義:一個被SELECT語句檢索出來的結果集。

1、聲明遊標
DECLARE cursor_name(遊標的名稱) CURSOR FOR select_statement(select語句,不能用select…into…語句)
2、打開遊標(每次打開的遊標的結果集可能會不同)
OPEN cursor_name(遊標的名稱)
3、讀取數據
FETCH cursor_name(遊標的名稱) INTO var_name(用於指定存放數據的變量名)
4、關閉遊標
CLOSE cursor_name(遊標的名稱)

沒有關閉遊標的語句,到達END語句時自動關閉。

5、注意事項
遊標只能用於存儲過程或存儲函數中,不能單獨在查詢操作中使用。
在存儲過程或存儲函數中可以定義多個遊標,但在一個BEGIN…END語句塊中每一個遊標的名字必須唯一。
遊標不是一條SELECT語句,是被SELECT語句檢索出來的結果集。

四、調用存儲過程

CALL sp_name()語句使用CALL sp_name效果相同
CALL sp_name(parameter)
sp_name:調用的存儲過程的名稱
parameter:調用存儲過程所要使用的參數。

五、刪除存儲過程

DROP PROCEDURE sp_name;

第二節 存儲函數

存儲函數與存儲過程的區別:(簡答題
1、存儲函數不能擁有輸出函數,因爲存儲函數自身就是輸出參數;而存儲過程可以擁有輸出函數
2、可以直接對存儲函數進行調用,且不需要使用CALL語句;而存儲過程的調用,需要使用CALL語句
3、存儲函數中必須包含一條RETURN語句,而特殊SQL語句不允許包含存儲過程中。

一、創建存儲函數

(1)、創建存儲函數

例子:
CREATE FUNCTION fn_search(存儲函數的名稱)(cid INT)(存儲函數的參數,不能使用IN、OUT、INOUT關鍵字)
RETURNS(用於聲明存儲函數返回值的數據類型) CHAR(2)(用於指定返回值的數據類型)
DETERMINISTIC(routine_body,用於指定存儲函數的主體部分)

二、調用存儲函數

SELECT sp_name(存儲函數的名稱)

三、刪除存儲函數

DROP FUNCTION sp_name(存儲函數的名稱)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章