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)

?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值