1. 程式人生 > >MySQL中變數的定義和變數的賦值使用(轉)

MySQL中變數的定義和變數的賦值使用(轉)

說明:現在市面上定義變數的教程和書籍基本都放在儲存過程上說明,但是儲存過程上變數只能作用於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 語句句式:select
col_name[,...] into var_name[,...] table_expr [where...];

例子:

複製程式碼
declare v_employee_name varchar(100);
declare v_employee_salary decimal(8,4);