MySQL中變數的定義和變數的賦值使用(轉)
阿新 • • 發佈:2018-12-17
說明:現在市面上定義變數的教程和書籍基本都放在儲存過程上說明,但是儲存過程上變數只能作用於begin...end塊中,而普通的變數定義和使用都說的比較少,針對此類問題只能在官方文件中才能找到講解。
前言
MySQL儲存過程中,定義變數有兩種方式:
1、使用set或select直接賦值,變數名以@開頭
例如:
set @var=1;
可以在一個會話的任何地方宣告,作用域是整個會話,稱為使用者變數。
2、以declare關鍵字宣告的變數,只能在儲存過程中使用,稱為儲存過程變數,例如:
declare var1 int default 0;
主要用在儲存過程中,或者是給儲存傳引數中。
兩者的區別是:
在呼叫儲存過程時,以declare宣告的變數都會被初始化為null。而會話變數(即@開頭的變數)則不會被再初始化,在一個會話內,只須初始化一次,之後在會話內都是對上一次計算的結果,就相當於在是這個會話內的全域性變數。
主體內容
- 區域性變數
- 使用者變數
- 會話變數
- 全域性變數
會話變數和全域性變數叫系統變數。
一、區域性變數,只在當前begin/end程式碼塊中有效
區域性變數一般用在sql語句塊中,比如儲存過程的begin/end。其作用域僅限於該語句塊,在該語句塊執行完畢後,區域性變數就消失了。declare語句專門用於定義區域性變數,可以使用default來說明預設值。set語句是設定不同型別的變數,包括會話變數和全域性變數。 區域性變數定義語法形式
declare var_name [, var_name]... data_type [ DEFAULT value ];
例如在begin/end語句塊中新增如下一段語句,接受函式傳進來的a/b變數然後相加,通過set語句賦值給c變數。
set語句語法形式set var_name=expr [, var_name=expr]...;
set語句既可以用於區域性變數的賦值,也可以用於使用者變數的申明並賦值。
declare c int default 0; set c=a+b; select c as C;
或者用select …. into…形式賦值
select into 語句句式:selectcol_name[,...] into var_name[,...] table_expr [where...];
例子:
declare v_employee_name varchar(100); declare v_employee_salary decimal(8,4);