c mysql存储过程 out_MySQL存储过程带in和out参数
實例一:無參的存儲過程 復制代碼 代碼如下: $conn = mysql_connect('localhost','root','root') or die ("數據連接錯誤!!!"); mysql_select_db('test',$conn); $sql = " create procedure myproce() begin INSERT INTO user (id, username, sex) VALUES (NUL
MySQL支持IN(傳遞給存儲過程)、OUT(從存儲過程傳出)、INOUT(對存儲過程傳入和傳出) 所有MySQL變量必須以@開始! ? 最簡單的例子:[html]
mysql> DELIMITER $$ //用delimiter命令來把語句定界符從 ;變為//。這樣就允許在程序體用;定界符傳遞到服務器,而不是被mysql自己來解釋。
mysql> USE test $$
Databasechanged
mysql>DROPPROCEDUREIF EXISTS `sp_add`$$
Query OK, 0 rowsaffected (0.00 sec)
mysql>CREATEPROCEDUREsp_add(a INT, b INT,OUTcINT)
->BEGIN
->SETc=a+ b;
->END$$
Query OK, 0 rowsaffected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL sp_add (1,2,@c);
Query OK, 0 rowsaffected (0.00 sec)
mysql> SELECT@c;
+------+
| @c |
+------+
| 3 |
+------+
1 row inset(0.00 sec)
一個稍微復雜的例子:
mysql> show createtablet_BillNo;
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|Table |CreateTable |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t_BillNo | CREATETABLE`t_billno` (
`SaleNo`bigint(20)DEFAULTNULL,
`bmh`varchar(20)DEFAULTNULL
) ENGINE=InnoDB DEFAULTCHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC|
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row inset(0.00 sec)
mysql>select*fromt_BillNo;
+--------+------+
| SaleNo | bmh |
+--------+------+
| 1 | 2 |
| 4 | 3 |
| 4 | 5 |
| 7 | 7 |
| 12 | 8 |
+--------+------+
5rowsinset (0.00 sec)
mysql>
mysql> DELIMITER $$
mysql> USE test $$
Databasechanged
mysql>DROPPROCEDUREIF EXISTS `sp_GetMaxNumber`$$
Query OK, 0 rowsaffected (0.01 sec)
DELIMITER $$
USE test $$
DROPPROCEDUREIF EXISTS `sp_GetMaxNumber`$$
CREATEPROCEDUREsp_GetMaxNumber (INv_bmhVARCHAR(6),OUTv_MaxNoINT)
BEGIN
STARTTRANSACTION;
UPDATEt_BillNo
SETSaleNo = IFNULL(SaleNo,0)+1
WHEREbmh = v_bmh;
IF @@error_count = 0 THEN
BEGIN
SELECTSalenoINTOv_MaxNoFROMt_BillNoWHEREbmh = v_bmh;
COMMIT;
END;
ELSE
BEGIN
ROLLBACK;
SETv_MaxNo = 0;
END;
ENDIF;
END$$
DELIMITER ;
mysql>CREATEPROCEDUREsp_GetMaxNumber (INv_bmhVARCHAR(6),OUTv_MaxNoINT)
->BEGIN
-> START TRANSACTION;
->UPDATEt_BillNo
->SETSaleNo = IFNULL(SaleNo,0)+1
->WHEREbmh = v_bmh;
-> IF @@error_count = 0 THEN
->BEGIN
-> SELECTSalenoINTOv_MaxNoFROMt_BillNoWHEREbmh = v_bmh;
->COMMIT;
->END;
->ELSE
->BEGIN
-> ROLLBACK;
-> SETv_MaxNo = 0;
->END;
->ENDIF;
->END$$
Query OK, 0 rowsaffected (0.00 sec)
mysql> DELIMITER ;
mysql>
mysql> call sp_GetMaxNumber(8,@v_MaxNo);
Query OK, 0 rowsaffected (0.00 sec)
mysql>select@v_MaxNo;
+----------+
| @v_MaxNo |
+----------+
| 12 |
+----------+
1 row inset(0.00 sec)
?
總結
以上是生活随笔為你收集整理的c mysql存储过程 out_MySQL存储过程带in和out参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab第七讲,matlab第七讲教
- 下一篇: php ajax jquery 表单重复