使用變數 儲存過程和函式及變數的使用

2021-10-14 14:59:56 字數 4042 閱讀 7591

儲存過程和函式是在資料庫中定義一些sql語句的集合,然後直接呼叫這些儲存過程和函式來執行已經定義好的sql語句。儲存過程和函式可以避免開發人員重複的編寫相同的sql語句。而且,儲存過程和函式是在mysql伺服器中儲存和執行的,可以減少客戶端和伺服器端的資料傳輸。

一.建立儲存過程和函式

1. 建立儲存過程

mysql中建立儲存過程的基本形式:

create procedure sp_name([proc_parameter[,…]]) [characteristic…] routine_body;

sp_name:引數是儲存過程的名稱;

proc_parameter:表示儲存過程的引數列表;

characteristic:引數指定儲存過程的特性;

routine_body:引數是sql**的內容,可以用begin…end來標誌sql**的開始和結束;

proc_parameter中每個引數由3部分組成。這3部分分別是輸入輸出型別、引數名稱和引數型別。

[in|out|inout] param_name type

in:表示輸入引數

out:表示輸出引數

inout:表示既可以是輸入也可以是輸出

param_name:引數是儲存過程的引數名稱

type:引數指定儲存過程的引數型別,該型別可以是mysql資料庫的任意資料型別。

characteristic引數有多個取值。取值說明:

language sql:說明routine_body部分是由sql語言的語句組成,這也是資料庫系統預設的語言。

[not] deterministic:指明儲存過程的執行結果是否是確定的。

deterministic:表示結果是確定的,每次執行儲存過程時,相同的輸入會得到相同的輸出。

not deterministic:表示結果是非確定的,相同的輸入可能得到不同的輸出。預設情況下,結果也是非確定的。

:指明子程式使用sql語句的限制。

contains sql:表示子程式包含sql語句,但不包含讀或者寫資料的語句;

no sql:表示子程式中不包含sql語句;

reads sql data:表示子程式中包含讀資料的語句;

modifies sql data:表示子程式中包含寫資料的語句。預設情況下,系統會指定為contains sql。

sql security:指明誰有許可權來執行。

definer:表示只有定義者自己才能執行;

invoker:表示呼叫者可以執行。預設情況下,系統指定的許可權是definer。

comment 『string』:注釋資訊。

注:建立儲存過程時,系統預設指定contains sql,表示儲存過程中使用sql語句,最好設定為no sql。而且,儲存過程中最好在comment部分對儲存過程進行簡單的注釋,以便以後再閱讀儲存過程的**是更加方便。

示例:下面建立乙個名為num_from_employee的儲存過程。

delimiter &&

create procedure num_from_employee(in emp_id int,out count_num int)

reads sql data

begin

select count(*) into count_num

from employee

where d_id=emp_id;

end &&

注:**執行完畢,沒報錯就表示儲存過程建立成功;

說明:mysq中預設的語句結束符為分號(;)。儲存過程中的sql語句需要分號來結束。為避免衝突,首先用」delimiter &&」將mysql的技術符設定為&&。最後再用」delimiter;」來將結束符恢復成分號。

建立儲存函式

mysql中建立儲存函式的語法:

create function sp_name([func_parameter[,…]])

returns type

[characteristic…] routine_body

sp_name:引數是函式的名稱;

func_parameter:表示儲存函式的引數列表;

returns type:指返回值型別;

characteristic:引數指定儲存函式的特性,該引數的取值與儲存過程中取值是一樣的。

routine_body:引數是sql**的內容,可以用begin…end來標誌sql**的開始和結束。

func_parameter:可以由多個引數組成,其中每個引數由引數名稱和引數型別組成,形式:param_name type

其中,param_name 是儲存函式的引數名稱;

type:引數是指定儲存函式的引數型別;

示例:下面建立乙個名為name_from_employee的儲存函式

create function name_from_employee(emp_id int)

returns varchar(20)

begin

return (select name from employee where num=emp_id);

end

儲存函式的名稱:name_from_employee;

函式的引數:emp_id;

返回值是varchar型別;

2. 變數的使用

在儲存過程和函式中,可以定義和使用變數。可以使用declare關鍵字定義變數,然後賦值。變數的作用範圍是begin…and程式段中。

(1) 定義變數

使用declare關鍵字定義變數。語法:

declare var_name[,…] type [default value]

declare:宣告變數;

var_name:引數是變數的名稱(可以同時定義多個變數);

type:指定變數的型別;

default value:子句將變數預設值設定為value,未使用default value時,預設值為null;

示例:declare my_sql int default 10;

(2) 為變數賦值

mysql中set關鍵字為變數賦值。語法:

set var_name = expr[,var_name=expr]…

set:為變數賦值;

var_name:引數是變數的名稱;

expr:引數是賦值表示式;

注:乙個set語句可以同時為多個變數賦值,各個變數的賦值語句之間用逗號(,)隔開。

示例:為變數my_sql賦值為30;

set my_sql=30;

mysql中還可以用select…into…語句為變數賦值。語法:

select col_name[,…] into var_name[,…] from table_name where condition

col_name:引數表示查詢的欄位名稱;

var_char:引數是變數的名稱;

table_name:引數指表的名稱;

condition:引數指查詢條件;

示例:下面從employee表中查詢id為2的記錄。將該記錄的d_id值賦給my_sql變數。

儲存過程和變數

在sql server中,可以定義子程式存放在資料庫中,這樣子程式稱為儲存過程 sql server中支援以下幾種型別的儲存過程 1,系統儲存過程 以 sp 為字首,儲存在master裡面 2,本地儲存過程 儲存在使用者自定義的資料庫中 3,擴充套件儲存過程 以 xp 為字首,儲存在master裡面...

C變數及函式儲存型別

1.變數及函式宣告格式 在c語言中,對於乙個變數的宣告 定義格式如下 儲存型別 型別修飾符 資料型別 變數名 在c語言中,對於乙個函式的宣告格式如下 儲存型別 返回資料型別 函式名 引數列表 2.儲存型別 1 auto 只能用來標識變數的儲存型別,意義為自動型別,標識該區域性變數儲存在正在執行程序棧...

C變數及函式儲存型別

變數及函式宣告格式 在c語言中,對於乙個變數的宣告 定義格式如下 儲存型別 型別修飾 資料型別 變數名 其中 auto儲存型別 auto 只能用來標識變數的儲存型別,意義為自動型別,標識該區域性變數儲存在正在執行的程序棧區域,一般情況,對於區域性變數,auto 為預設的儲存型別,不需要顯示指定。區域...