本文為mariadb官方手冊:DECLARE Variable的譯文。 原文:https://mariadb.com/kb/en/library/declare-variable/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/declare-vari ...
本文為mariadb官方手冊:DECLARE Variable的譯文。
原文:https://mariadb.com/kb/en/library/declare-variable/
我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/declare-variable/
語法:
DECLARE var_name [, var_name] ... type [DEFAULT value]
描述
該語句用在該語句用來在存儲程式stored programs中聲明本地變數。可以用DEFAULT
關鍵字為變數指定預設值。變數的值允許是一個表達式(甚至子查詢),並不要求它一定是一個常量值。如果不指定 這個預設值也不一定是常量。如果不指定DEFAULT
子句,則變數的初始值為NULL
。
本地變數和存儲過程的參數類似,會對關於數據類型和溢出做相關檢查。更多信息參考CREATE PROCEDURE。
局部變數必須聲明在CONDITION s
, CURSOR s 和 HANDLER s
之前。
局部變數名不區分大小寫。
局部變數的生效範圍是在聲明它的BEGIN ... END
之內。如果代碼塊中嵌套代碼塊,那嵌套中的代碼可以引用上一級的變數,除非內層代碼塊定義的變數名和上層變數名相同。
TYPE OF / ROW TYPE OF
存儲過程中使用
TYPE OF
和ROW TYPE OF
錨定數據類型的功能是從 MariaDB 10.3 引入的。
錨定數據類型時允許基於另一個對象來定義數據類型(例如表中行),而無需專門在聲明語句中設置。如果錨定對象的數據類型改變,則自身也隨之改變。這使得存儲過程更容易維護,表中數據類型改變時,存儲過程中的變數類型也自動隨之改變。
使用ROW TYPE OF
定義的變數隱含了ROW變數,因此它們有相同的特性。無法在 LIMIT 子句中使用ROW TYPE OF
。
TYPE OF
和 ROW TYPE OF table_name
的實時數據類型在調用存儲過程的開頭就可以獲取到。存儲過程中對錨定對象所在表執行ALTER TABLE 或 DROP TABLE語句不會影響已錨定的變數類型,即使該變數是定義在ALTER TABLE 或 DROP TABLE 語句之後的(譯者註:因為在存儲過程中,執行所有動作之前,變數的類型就已經錨定結束)。
ROW TYPE OF cursor_name
變數的實時數據類型是在執行變數聲明語句時才獲取到的。數據類型僅只錨定一次,之後不再改變。如果游標中的ROW TYPE OF
變數是定義在一個迴圈之中,則數據類型在迴圈的開頭就已經獲取,且之後的迴圈不再改變。
在調用存儲過程的開頭,會檢查TYPE OF
和 ROW TYPE OF
所錨定的表是否存在。但在創建存儲過程CREATE PROCEDURE或函數CREATE FUNCTION時,不會檢查變數所引用的表是否存在。
示例
DECLARE tmp TYPE OF t1.a; -- 基於表{{t1}}中的{{a}}列獲取數據類型
DECLARE rec1 ROW TYPE OF t1; -- 錨定表{{t1}}中行數據類型
DECLARE rec2 ROW TYPE OF cur1; -- 基於游標{{cur1}}獲取行數據類型
See Also
回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/8637747.html
註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!