存儲過程-使用(二)


一、查詢

1、簡單的無參數的查詢

我的數據庫為后台,里面有表admin
下面就我進行對admin表查詢。
USE houtai;
DELIMITER / /
CREATE PROCEDURE phelloword()
BEGIN
SELECT * FROM admin;
END / /
CALL phelloword()
執行后的截圖如下:
這里我在執行的時候呢,出現過下面的錯誤,我之前的sql語句是這樣寫的:
USE houtai;
CREATE PROCEDURE phelloword()
BEGIN
SELECT * FROM admin;
END
CALL phelloword()
出現如下錯誤:
耗費了我好多時間去解決,然后從百度中看見了這個說明:

在這個問題上我糾纏了很久,在MySQL的命令行工具中執行同樣不成功,但是根據提示信息可以知道執行在 SELECT 'Hello Word!' AS F;處結束,后面的END;沒有執行,這顯然會導致錯誤。

這里MySQL 5.0需要選擇以個分隔符,語法如下:DELIMITER //

分隔符是通知MySQL客戶端已經輸入完成的符號。一直都是用“;”,但是在存儲過程中不行,因為存儲過程中很多語句都需要用到分號。

 2、帶參數的存儲過程

​寫一個包括參數的存儲過程:
USE houtai;
DELIMITER / /
CREATE PROCEDURE phell(p_username CHAR( 15))
BEGIN
SELECT * FROM admin WHERE username = p_username;
END / /
CALL phell( "admin")
這里定義參數 p_username  然后我們往函數中傳遞一個值,來進行查詢,結果如下:

3、寫一個包括參數,變量,變量賦值,條件判斷,UPDATE語句,SELECT返回結果集的完整的一個存儲過程

寫一個包括參數,變量,變量賦值,條件判斷,UPDATE語句,SELECT返回結果集的完整的一個存儲過程,如下:

CREATE PROCEDURE plogin
(
    p_username char(15),
    p_password char(32),
    p_ip char(18),
    p_logintime datetime
)
LABEL_PROC:
BEGIN    
 
    DECLARE v_uid mediumint(8);  
    DECLARE v_realpassword char(32);     
    DECLARE v_nickname varchar(30);    
    DECLARE v_oltime smallint(6);      
   
    SELECT u.uid, u.password, f.nickname, u.oltime INTO v_uid, v_realpassword, v_nickname, v_oltime
    FROM cdb_members u INNER JOIN cdb_memberfields f ON f.uid = u.uid WHERE u.username = p_username;   
   
    IF (v_uid IS NULL) THEN
        SELECT 2 AS ErrorCode;
        LEAVE LABEL_PROC;
    END IF;
 
    IF (p_password <> v_realpassword) THEN
        SELECT 3 AS ErrorCode;
        LEAVE LABEL_PROC;
    END IF;
 
    UPDATE ipsp_userexpands SET lastloginip = p_ip, lastlogintime = p_logintime WHERE uid = v_uid;
 
    SELECT 0 AS ErrorCode, v_uid AS uid, v_nickname AS nickname, v_oltime AS oltime;
 
END LABEL_PROC //

 

首先要說的是給變量賦值的語法,MySQL中使用SELECT u.uid, u.password, f.nickname, u.oltime INTO v_uid, v_realpassword, v_nickname, v_oltime FROM cdb_members u INNER JOIN cdb_memberfields f ON f.uid = u.uid WHERE u.username = p_username;這種方式給變量賦值。

 

其次是條件判斷的語法結構,如下所示:

IF ... THEN

    ...;

ELSE

    IF ... THEN

      ...;

    ELSEIF

      ...;

    ELSE

      ...;

    END IF;

END IF;

 

最后說說LEAVE 語法的使用。當滿足某種條件,不繼續執行下面的SQL時,在MS SQL SERVER中使用RETURN語法,在MySQL中我沒有找到對應的關鍵字,但是這里可以利用LEAVE語法來滿足要求,在存儲過程的BEGIN前定義一個標簽,如:“LABEL_PROC:” 然后再需要用到RETURN中斷執行的地方執行“LEAVE LABEL_PROC;”即可。


 










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM