程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql存儲過程入門知識

Mysql存儲過程入門知識

編輯:MySQL綜合教程

Mysql存儲過程入門知識  

[sql] 
#1,查看數據庫所有的存儲過程名    
#--這個語句被用來移除一個存儲程序。不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程  
#SELECT NAME FROM mysql.proc WHERE db='數據庫名';   

 

[sql] 
#2,列出所有的存儲過程   
#SHOW  PROCEDURE  STATUS;  
#3,查看存儲過程詳細  
#SHOW CREATE PROCEDURE 數據庫名.存儲過程名;   
[sql] 
#4,存儲過程的創建 由括號包圍的參數列必須總是存在。如果沒有參數,也該使用一個空參數列()。  
#每個參數默認都是一個IN參數。要指定為其它參數,可在參數名之前使用關鍵詞 OUT或INOUT   
#CREATE PROCEDURE存儲過程名 (參數列表); 使用BEGIN ... END復合語句來包含多個語句  
#   BEGIN  
#         SQL語句代碼塊  
#   END  

 

[sql] 
#5,DECLARE語句(用來聲明局部變量);  
#要給變量提供一個默認值,需包含一個DEFAULT子句。如果沒有DEFAULT子句,初始值為NULL。局部變量的作用范圍在它被聲明的BEGIN ... END塊內。  
#DECLARE var_name[,...] type [DEFAULT value]   

 

[sql] 
#6,變量SET語句  
#SET var_name = expr [, var_name = expr]    
[sql] 
#7,SELECT ... INTO語句;這個SELECT語法把選定的列直接存儲到變量,因此,只有單一的行可以被取回。  
#SELECT col_name[,...] INTO var_name[,...] table_expr  
[sql] 
#8,修改存儲過程   
#ALTER PROCEDURE 存儲過程名SQL語句代碼塊;    
[sql] 
#9,刪除存儲過程  
#DROP PROCEDURE  IF  EXISTS 存儲過程名;   
#存儲過程的調用;存儲過程名稱後面必須加括號,哪怕該存儲過程沒有參數傳遞。  
[sql] 
#10,CALL 存儲過程名(參數列表);    
[sql] 
#11,MySQL 存儲過程參數(in;)  
#跟 C 語言的函數參數的值傳遞類似, MySQL 存儲過程內部可能會修改此參數,但對 in 類型參數的修改,對調用者(caller)來說是不可見的(not visible)。  
[sql] 
#12,MySQL 存儲過程參數(out)  
#MySQL 存儲過程 “out” 參數:從存儲過程內部傳值給調用者。在存儲過程內部,該參數初始值為 null,無論調用者是否給存儲過程參數設置值  
[sql] 
#13,MySQL 存儲過程參數(inout)  
#MySQL 存儲過程 inout 參數跟 out 類似,都可以從存儲過程內部傳值給調用者。不同的是:調用者還可以通過 inout 參數傳遞值給存儲過程。   
#注:如果僅僅想把數據傳給 MySQL 存儲過程,那就使用“in” 類型參數;  
#    如果僅僅從 MySQL 存儲過程返回值,那就使用“out” 類型參數;  
#    如果需要把數據傳給 MySQL 存儲過程,還要經過一些計算後再傳回給我們,此時,要使用“inout” 類型參數。  
  
#demo1:創建一個簡單的存儲過程(獲取用戶總數),帶輸出參數。  
#--刪除存儲過程  
DROP PROCEDURE IF EXISTS proc_users_getCount  
#--創建存儲過程  
CREATE PROCEDURE proc_users_getCount(OUT n INT)  
BEGIN  
     SELECT COUNT(*) FROM users ;  
END  
#--MYSQL調用存儲過程  
CALL proc_users_getCount(@n);   
  
#demo2:創建一個簡單的存儲過程(根據用戶id獲取用戶信息),帶輸入參數。  
#--刪除存儲過程  
DROP PROCEDURE IF EXISTS proc_users_findById;  
#--創建存儲過程  
CREATE PROCEDURE proc_users_findById(IN n INT)  
BEGIN  
     SELECT * FROM users WHERE id=n;   
END  
#--定義變量  
SET @n=1;  
#--調用存儲過程   
CALL proc_users_findById(@n);  
  
#Last:操作存儲過程時應注意:  
#1.刪除存儲過程時只需要指定存儲過程名即可,不帶括號;  
#2.創建存儲過程時,不管該存儲過程有無參數,都需要帶括號;  
#3.在使用SET定義變量時應遵循SET的語法規則;  
#SET @變量名=初始值;  
#4.在定義存儲過程參數列表時,應注意參數名與數據庫中字段名區別開來,否則將出現無法預期的結果.  
  
#END:java中調用存儲過程util  
#   // 執行存儲過程  
#   @Override  
#   public ResultSet execProc(final String procName, final Object[] params) {  
#       return (ResultSet) getHibernateTemplate().execute(  
#               new HibernateCallback() {  
#                   public Object doInHibernate(Session session)  
#                           throws HibernateException, SQLException {  
#                       CallableStatement cstmt = session.connection()  
#                               .prepareCall(procName);  
#                       if (params != null) {  
#                           for (int i = 0; i < params.length; i++) {  
#                               cstmt.setObject(i + 1, params[i]);  
#                           }  
#                       }  
#                       ResultSet rs = cstmt.getResultSet();  
#                       return rs;  
#                   }  
#               });  
#   }  

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved