一、查詢
1、簡單的無參數的查詢

下面就我進行對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;”即可。