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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql execute 存储过程_Mysql存储过程调用

發布時間:2023/12/14 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql execute 存储过程_Mysql存储过程调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1create? procedure? (創建)

create procedure存儲過程名 (參數列表)

begin

sql語句代碼塊

end

注意:

由括號包圍的參數列必須總是存在。如果沒有參數,也該使用一個空參數列()。每個參數默認都是一個in參數。要指定為其它參數,可在參數名之前使用關鍵詞 out或inout

在mysql客戶端定義存儲過程的時候使用delimiter命令來把語句定界符從;變為//。

當使用delimiter命令時,你應該避免使用反斜杠(‘"’)字符,因為那是mysql的轉義字符。

如:

復制代碼代碼示例:

mysql> delimiter //

mysql> create procedure simpleproc (out param1 int)

-> begin

->?? select count(*) into param1 from t;

-> end

-> //

query ok, 0 rows affected (0.00 sec)

1.2alter? procedure (修改)

alter procedure 存儲過程名sql語句代碼塊

這個語句可以被用來改變一個存儲程序的特征。

1.3drop? procedure (刪除)

drop procedure? if? exists存儲過程名

eg:drop procedure if exists proc_employee (proc_employee 存儲過程名)

這個語句被用來移除一個存儲程序。不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程

1.4show? create? procedure(類似于show create table,查看一個已存在的存儲過程)

show create procedure 存儲過程名

1.5show? procedure? status (列出所有的存儲過程)

show? procedure? status

1.6call語句(存儲過程的調用)

call 存儲過程名(參數列表)

call語句調用一個先前用create procedure創建的程序。

call語句可以用聲明為out或的inout參數的參數給它的調用者傳回值。

存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞

1.7begin ... end(復合語句)

[begin_label:]begin

[statement_list]

end[end_label]

存儲子程序可以使用begin ... end復合語句來包含多個語句。

statement_list 代表一個或多個語句的列表。statement_list之內每個語句都必須用分號(;)來結尾。

復合語句可以被標記。除非begin_label存在,否則end_label不能被給出,并且如果二者都存在,他們必須是同樣的。

1.8declare語句(用來聲明局部變量)

declare語句被用來把不同項目局域到一個子程序:局部變量

declare僅被用在begin ... end復合語句里,并且必須在復合語句的開頭,在任何其它語句之前。

1.9存儲程序中的變量

1.1??? declare局部變量

declare var_name[,...] type [default value]

這個語句被用來聲明局部變量。

要給變量提供一個默認值,請包含一個default子句。

值可以被指定為一個表達式,不需要為一個常數。

如果沒有default子句,初始值為null。

局部變量的作用范圍在它被聲明的begin ... end塊內。

它可以被用在嵌套的塊中,除了那些用相同名字聲明變量的塊。

1.2??? 變量set語句

set var_name = expr [, var_name = expr]在存儲程序中的set語句是一般set語句的擴展版本。

被參考變量可能是子程序內聲明的變量,或者是全局服務器變量。

在存儲程序中的set語句作為預先存在的set語法的一部分來實現。這允許set a=x, b=y, ...這樣的擴展語法。

其中不同的變量類型(局域聲明變量及全局和集體變量)可以被混合起來。

這也允許把局部變量和一些只對系統變量有意義的選項合并起來。

1.3??? select ... into語句

select col_name[,...] into var_name[,...] table_expr

這個select語法把選定的列直接存儲到變量。

因此,只有單一的行可以被取回。

select id,data into x,y from test.t1 limit 1;

注意,用戶變量名在mysql 5.1中是對大小寫不敏感的。

重要: sql變量名不能和列名一樣。如果select ... into這樣的sql語句包含一個對列的參考,并包含一個與列相同名字的局部變量,mysql當前把參考解釋為一個變量的名字。

1.10???? mysql 存儲過程參數類型(in、out、inout)

mysql 存儲過程參數(in)

mysql 存儲過程 “in” 參數:跟 c 語言的函數參數的值傳遞類似, mysql 存儲過程內部可能會修改此參數,但對 in 類型參數的修改,對調用者(caller)來說是不可見的(not visible)。

mysql 存儲過程參數(out)

mysql 存儲過程 “out” 參數:從存儲過程內部傳值給調用者。在存儲過程內部,該參數初始值為 null,無論調用者是否給存儲過程參數設置值

mysql 存儲過程參數(inout)

mysql 存儲過程 inout 參數跟 out 類似,都可以從存儲過程內部傳值給調用者。不同的是:調用者還可以通過 inout 參數傳遞值給存儲過程。

總結

如果僅僅想把數據傳給 mysql 存儲過程,那就使用“in” 類型參數;如果僅僅從 mysql 存儲過程返回值,那就使用“out” 類型參數;如果需要把數據傳給 mysql 存儲過程,還要經過一些計算后再傳回給我們,此時,要使用“inout” 類型參數。

1.11???? 例子:

1.1?? 創建存儲過程

帶(輸出參數)返回值的存儲過程:

復制代碼代碼示例:

--刪除存儲過程

drop procedure if exists proc_employee_getcount

--創建存儲過程

create procedure proc_employee_getcount(out n int)

begin

select count(*) from employee ;

end

--mysql調用存儲過程

call proc_employee_getcount(@n);

帶輸入參數的存儲過程:

復制代碼代碼示例:

--刪除存儲過程

drop procedure if exists proc_employee_findbyid;

--創建存儲過程

create procedure proc_employee_findbyid(in n int)

begin

select * from employee where id=n;

end

--定義變量

set @n=1;

--調用存儲過程

call proc_employee_findbyid(@n);

操作存儲過程時應注意:

1. 刪除存儲過程時只需要指定存儲過程名即可,不帶括號;

2. 創建存儲過程時,不管該存儲過程有無參數,都需要帶括號;

3. 在使用set定義變量時應遵循set的語法規則;

set @變量名=初始值;

4. 在定義存儲過程參數列表時,應注意參數名與數據庫中字段名區別開來,否則將出現無法預期的結果

1.12???? java代碼調用存儲過程(jdbc)

相關api:java.sql.callablestatement

使用到java.sql.callablestatement接口,該接口專門用來調用存儲過程;

該對象的獲得依賴于java.sql.connection;

通過connection實例的preparecall()方法返回callablestatement對象

preparecall()內部為一固定寫法{call 存儲過程名(參數列表1,參數列表2)}可用?占位

eg: connection.preparecall("{call proc_employee(?)}");

存儲過程中參數處理:

輸入參數:通過java.sql.callablestatement實例的setxxx()方法賦值,用法等同于java.sql.preparedstatement

輸出參數:通過java.sql.callablestatement實例的registeroutparameter(參數位置, 參數類型)方法賦值,其中參數類型主要使用java.sql.types中定義的類型

java代碼調用帶輸入參數的存儲過程 (根據輸入id查詢雇員信息)

復制代碼代碼示例:

publicvoid executeprocedure()

{

try {

/**

*callablestatementjava.sql.callablestatement

*connectionjava.sql.connection

*jdbc調用存儲過程原型

*{call存儲過程名(參數列表1,參數列表2)}可用?代替

*/

callablestatement=connection.preparecall("{call proc_employee_findbyid(?)}");

callablestatement.setint(1, 1); //設置輸入參數

resultset=callablestatement.executequery();//執行存儲過程

if(resultset.next())

{

system.out.println(resultset.getint(1)+""t"+resultset.getstring(2));

}

} catch (sqlexception e) {

e.printstacktrace();

}

}

java代碼調用帶輸出參數的存儲過程 (返回數據庫中的記錄數)

復制代碼代碼示例:

publicvoid executeprocedure()

{

try {

/**

*callablestatementjava.sql.callablestatement

*connectionjava.sql.connection

*jdbc調用存儲過程原型

*{call存儲過程名(參數列表1,參數列表2)}可用?代替

*/

callablestatement=connection.preparecall("{call proc_employee_getcount(?)}");

//設置輸出參數

callablestatement.registeroutparameter(1, types.integer);

//執行存儲過程

resultset=callablestatement.executequery();

if(resultset.next())

{

system.out.println(resultset.getint(1));

}

} catch (sqlexception e) {

e.printstacktrace();

}

}

總結

以上是生活随笔為你收集整理的mysql execute 存储过程_Mysql存储过程调用的全部內容,希望文章能夠幫你解決所遇到的問題。

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