資料庫 建立和使用儲存過程和儲存函式

2021-09-26 19:32:44 字數 2298 閱讀 5989

儲存過程(stored procedure)和儲存函式(stored function)是在資料庫中定義的一些完成特定功能的sql語句集合,其經編譯後儲存在資料庫中。儲存過程和儲存函式中可包含流程控制語句及各種sql語句。它們可以接受引數、輸出引數、返回單個或者多個結果。

在mysql中使用儲存過程,而不是使用儲存在客戶端計算機本地的sql程式的優點如下:

建立儲存過程

在mysql中,建立儲存過程和儲存函式必須具有create routine許可權,並且alter routine和execute許可權被自動授予它的建立者。

# 建立儲存過程

create procedure procedure_name([proc_parameter[,...]]) [characteristic[,...]] routine_body

procedure_name:

[in|out|inout]param_name type

characteristic:

language sql、[not]deterministic、、

sql security、comment'string'

# 呼叫儲存過程

call [dbname.]sp_name([parameter[,...]]);

在建立儲存過程時,系統預設指定contains sql,表示儲存過程中使用了sql語句。但是,如果儲存過程中沒有使用sql語句,最好設定為no sql。而且,最好在儲存過程的comment部分對儲存過程進行簡單的注釋,以便以後在閱讀儲存過程的**時理解**。

mysql> use gradem;

database changed

mysql> delimiter //

mysql> create procedure proc_sc()

-> reads sql data

-> begin

-> select student.sno, sname, sum(degree)/count(degree) from student inner join sc

on student.sno=sc.sno;

-> end //

query ok, 0 rows affected (0.09 sec)

mysql> delimiter;

mysql>

mysql中預設的語句結束符為分號(?。儲存過程中的sql語句需要分號來結束。為了避免衝突,首先用「delimiter //」將mysql的結束符設定為//,最後用「delimiter ;」將結束符恢復成分號。

建立儲存函式

在mysql中,儲存函式的使用方法與mysql內部函式的使用方法一樣。兩者唯一的區別在於,儲存函式是使用者自己定義的,而內部函式是mysql開發者定義的。

# 建立儲存函式

create function func_name([func_parameter[,...]]) retures type [characteristic[,...]] routine_body

# 呼叫儲存函式

select [dbname.]func_name([parameter[,...]]);

procedure可以指定in、out或inout型別的引數,而function的引數型別預設為in。returns子句只能包含在function中,它用來指定函式的返回型別,而且函式體必須包含乙個return value語句。

檢視儲存過程和儲存函式

# 檢視儲存過程和儲存函式的狀態

show status [like 'pattern'];

或show create sp_name;

或select * from information_schema.routines where routine_name='sp_name';

show status語句只能檢視儲存過程或儲存函式是操作哪乙個資料庫,以及儲存過程或儲存函式的名稱、型別、誰定義的、建立和修改時間、字元編碼等資訊。但是,這個語句不能查詢儲存過程或儲存函式的具體定義。如果就需要檢視詳細定義,就需要使用show create語句。

刪除儲存過程和儲存函式

drop  [if exists] sp_name;
if exists子句是mysql的擴充套件,如果儲存過程或儲存函式不存在,則它可以防止發生錯誤,產生乙個用show warnings檢視的警告。如果另乙個儲存過程呼叫某個已被刪除的儲存過程,則mysql將在執行呼叫程序時顯示一條錯誤訊息。

(最近更新:2023年09月03日)

建立和使用儲存過程

建立和使用儲存過程 用create procedure命令建立儲存過程和儲存函式。語法 create or replace procedure 過程名 引數列表 asplsql子程式體 第乙個儲存過程 列印hello world 呼叫儲存過程 1.exec sayhelloworld 2.begin...

資料庫 實驗六 游標 儲存過程的建立和使用

1 游標操作 在選修資料庫中,以student sno,sname,s sage,sdept course cno,cname,cpno,credit sc sno,cno,grade 表為基礎完成下列游標操作。1 在student表中定義乙個包含sno,sname,s sage,sdept的滾動游...

Oracle資料庫儲存過程和建立過程

oracle提供可以把pl sql程式儲存在資料庫中,並可以在任何地方來執行它。這樣就叫儲存過程或函式。儲存過程和函式統稱為pl sql子程式,它們是被命名的pl sql塊,均儲存在資料庫中,並通過輸入 輸出引數或輸入 輸出引數與其呼叫者交換資訊。儲存過程和函式的唯一區別是 函式有個返回值,而儲存過...