日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用变量_存储过程和函数及变量的使用

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用变量_存储过程和函数及变量的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

存儲過程和函數是在數據庫中定義一些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:表示結果是非確定的,相同的輸入可能得到不同的輸出。默認情況下,結果也是非確定的。

{contains sql|no sql|reads sql data|modifies sql data}:指明子程序使用SQL語句的限制。

contains SQL:表示子程序包含SQL語句,但不包含讀或者寫數據的語句;

no SQL:表示子程序中不包含SQL語句;

reads SQL data:表示子程序中包含讀數據的語句;

modifies sql data:表示子程序中包含寫數據的語句。默認情況下,系統會指定為contains SQL。

SQL security{definer|invoker}:指明誰有權限來執行。

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變量。

select d_id into my_sql from employee where id=2;

總結

以上是生活随笔為你收集整理的使用变量_存储过程和函数及变量的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。