文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  儲存程序語法

27.2.1 儲存程序語法

儲存程序可以是程序或函數。儲存程序是使用 CREATE PROCEDURECREATE FUNCTION 陳述式建立的 (請參閱第 15.1.17 節「CREATE PROCEDURE 和 CREATE FUNCTION 陳述式」)。程序是使用 CALL 陳述式叫用的 (請參閱第 15.2.1 節「CALL 陳述式」),並且只能使用輸出變數傳回值。函數可以像其他任何函數一樣從陳述式內部呼叫 (也就是說,藉由叫用函數的名稱),並且可以傳回純量值。儲存程序的主體可以使用複合陳述式 (請參閱第 15.6 節「複合陳述式語法」)。

可以使用 DROP PROCEDUREDROP FUNCTION 陳述式 (請參閱第 15.1.29 節「DROP PROCEDURE 和 DROP FUNCTION 陳述式」) 卸除儲存程序,並使用 ALTER PROCEDUREALTER FUNCTION 陳述式 (請參閱第 15.1.7 節「ALTER PROCEDURE 陳述式」) 變更儲存程序。

儲存程序或函數會與特定的資料庫相關聯。這有幾個含義:

  • 當叫用程序時,會執行隱式的 USE 資料庫名稱 (並在程序終止時復原)。不允許在儲存程序內使用 USE 陳述式。

  • 您可以使用資料庫名稱來限定程序名稱。這可以用於參照不在目前資料庫中的程序。例如,若要叫用與 test 資料庫相關聯的儲存程序 p 或函數 f,您可以說 CALL test.p()test.f()

  • 當卸除資料庫時,也會卸除與其相關聯的所有儲存程序。

儲存函數無法遞迴。

允許在儲存程序中遞迴,但預設會停用。若要啟用遞迴,請將 max_sp_recursion_depth 伺服器系統變數設定為大於零的值。儲存程序遞迴會增加執行緒堆疊空間的需求。如果您增加 max_sp_recursion_depth 的值,可能需要透過在伺服器啟動時增加 thread_stack 的值來增加執行緒堆疊大小。如需更多資訊,請參閱第 7.1.8 節「伺服器系統變數」

MySQL 支援一個非常有用的延伸功能,可讓您在儲存程序內使用一般的 SELECT 陳述式 (也就是說,不使用游標或本機變數)。這類查詢的結果集會直接傳送到用戶端。多個 SELECT 陳述式會產生多個結果集,因此用戶端必須使用支援多個結果集的 MySQL 用戶端程式庫。這表示用戶端必須使用至少與 4.1 版一樣新的 MySQL 版本中的用戶端程式庫。用戶端也應該在連線時指定 CLIENT_MULTI_RESULTS 選項。對於 C 程式,可以使用 mysql_real_connect() C API 函數來完成。請參閱mysql_real_connect()多個陳述式執行支援

儲存程序中陳述式參照的使用者變數,其類型會在第一次叫用程序時決定,並且在每次之後叫用程序時都會保留此類型。