MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子
来源:互联网 发布:电子音乐相册软件 编辑:程序博客网 时间:2024/04/29 08:11
最简单的例子:
- mysql> DELIMITER $$
- mysql> USE test $$
- Database changed
- mysql> DROP PROCEDURE IF EXISTS `sp_add`$$
- Query OK, 0 rows affected (0.00 sec)
- mysql> CREATE PROCEDURE sp_add(a INT, b INT,OUT c INT)
- -> BEGIN
- -> SET c=a+ b;
- -> END$$
- Query OK, 0 rows affected (0.00 sec)
- mysql> DELIMITER ;
- <p>mysql> CALL sp_add (1,2,@c);
- Query OK, 0 rows affected (0.00 sec)</p><p>mysql> SELECT @c;
- +------+
- | @c |
- +------+
- | 3 |
- +------+
- 1 row in set (0.00 sec)</p><p>mysql> </p>
一个稍微复杂的例子:
- mysql> show create table t_BillNo;
- +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | Table | Create Table |
- +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | t_BillNo | CREATE TABLE `t_billno` (
- `SaleNo` bigint(20) DEFAULT NULL,
- `bmh` varchar(20) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC |
- +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- 1 row in set (0.00 sec)
- mysql> select * from t_BillNo;
- +--------+------+
- | SaleNo | bmh |
- +--------+------+
- | 1 | 2 |
- | 4 | 3 |
- | 4 | 5 |
- | 7 | 7 |
- | 12 | 8 |
- +--------+------+
- 5 rows in set (0.00 sec)
- mysql>
- mysql> DELIMITER $$
- mysql> USE test $$
- Database changed
- mysql> DROP PROCEDURE IF EXISTS `sp_GetMaxNumber`$$
- Query OK, 0 rows affected (0.01 sec)
- DELIMITER $$
- USE test $$
- DROP PROCEDURE IF EXISTS `sp_GetMaxNumber`$$
- CREATE PROCEDURE sp_GetMaxNumber (IN v_bmh VARCHAR(6), OUT v_MaxNo INT)
- BEGIN
- START TRANSACTION;
- UPDATE t_BillNo
- SET SaleNo = IFNULL(SaleNo,0)+1
- WHERE bmh = v_bmh;
- IF @@error_count = 0 THEN
- BEGIN
- SELECT Saleno INTO v_MaxNo FROM t_BillNo WHERE bmh = v_bmh;
- COMMIT;
- END;
- ELSE
- BEGIN
- ROLLBACK;
- SET v_MaxNo = 0;
- END;
- END IF;
- END$$
- DELIMITER ;
- mysql> CREATE PROCEDURE sp_GetMaxNumber (IN v_bmh VARCHAR(6), OUT v_MaxNo INT)
- -> BEGIN
- -> START TRANSACTION;
- -> UPDATE t_BillNo
- -> SET SaleNo = IFNULL(SaleNo,0)+1
- -> WHERE bmh = v_bmh;
- -> IF @@error_count = 0 THEN
- -> BEGIN
- -> SELECT Saleno INTO v_MaxNo FROM t_BillNo WHERE bmh = v_bmh;
- -> COMMIT;
- -> END;
- -> ELSE
- -> BEGIN
- -> ROLLBACK;
- -> SET v_MaxNo = 0;
- -> END;
- -> END IF;
- -> END$$
- Query OK, 0 rows affected (0.00 sec)
- mysql> DELIMITER ;
- mysql>
- mysql> call sp_GetMaxNumber(8,@v_MaxNo);
- Query OK, 0 rows affected (0.00 sec)
- mysql> select @v_MaxNo;
- +----------+
- | @v_MaxNo |
- +----------+
- | 12 |
- +----------+
- 1 row in set (0.00 sec)
如何在php中调用MySQL的存储过程?本人没有测试过,从朋友那里借鉴过实例,如下:
$sql = "call test.sp_GetMaxNumber(8,@c);";
mysql_query($sql);//调用sp_GetMaxNumber的存储过程
$result = mysql_query('select @c;');
$array = mysql_fetch_array($result);
echo '<pre>';print_r($array);
但是在PB中调用,报错如下(来自itpub的网友的例子),有类似经历的朋友请分享下经验啊:
在PB W_MAIN窗体的CB_1.CLICK事件中:
string ls_bmh, ls_errtext
int li_maxno
ls_bmh = '0901'
sp_GetMaxNumber(ls_bmh, li_maxno)
ls_errtext = sqca.sqlerrtext
messagebox('Error',string(li_maxno)+' ' +sqlca.sqlerrtext)
但PB显示显示错误:
0 SQLSTATE = 37000
[MYSQL] [ODBC 5.1 DRIVER]YOU HAVE AN ERROR IN YOUR SQL SYNTAX;CHECK THE MANUAL THAT CORRESPONDS TO YOUR MYSQL SERVER VERSION FOR THE RIGHT SYNTAX TO USE NEAR '?=CALL SP_GetMaxNumber(0,_GBK'0901') AT LINE 1.
- MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子
- MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子
- 创建带 IN 和 OUT 参数的 MySQL 存储过程
- oracle调用带in out参数的存储过程
- Java调用Oracle、mysql带out参数的存储过程
- ibatis调用mysql带OUT类型参数的存储过程
- MySQL带参数的存储过程小例子
- MySQL带参数的存储过程小例子
- MySQL带参数的存储过程小例子
- MySQL带参数的存储过程小例子
- MySQL带参数的存储过程小例子
- MySQL带参数的存储过程小例子
- shell如何调用带参数的mysql存储过程
- 存储过程+调用存储过程+无/带参的存储过程+in参数+out参数+int out参数+为参数设置默认值
- 动态调用带out参数的存储过程
- hibernate4连接Oracle带out参数的存储过程调用
- 创建并调用带输出(OUT)参数的存储过程
- 存储过程参数in、out以及inout的区别
- 情诗一首
- 文件对比工具Beyond Compare使用方法
- ++,--运算符的使用
- CMAKE 指定编译调试版本或者发布版本
- thinkphp中PHPExcel用法
- MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子
- android带返回按钮的自定义标题栏
- CoreData NSPredicate 查询、搜索
- 独角兽有泡沫?Absolutely!但绝非估值泡沫
- 清理8组nodes中表的历史数据,平均每个node中的表有1.5亿条记录,需要根据date_created字段清理8000W数据记录,这个字段没有索引。
- Skype for Business Server 2015活动目录AD域要求
- 关于vim,ctags的一个小技巧
- 从NDK下载到JNI调用的整个流程
- Android在一个APP中通过包名或类名启动另一个APP