• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子

mysql 搞代码 4年前 (2022-01-09) 68次浏览 已收录 0个评论

最简单的例子:

mysql> DELIMITER $$mysql> USE test $$Database changedmysql> 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 ;
mysql> CALL sp_add (1,2,@c);Query OK, 0 rows affected (0.00 sec)mysql> SELECT @c;+------+| @c   |+------+|    3 |+------+1 row in set (0.00 sec)mysql>

一个稍微复杂的例子:

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 |+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------<p>本文来源gao!%daima.com搞$代*!码$网9</p>----------------------+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 changedmysql> 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_errtextint li_maxnols_bmh = '0901'sp_GetMaxNumber(ls_bmh, li_maxno)ls_errtext = sqca.sqlerrtextmessagebox('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如何调用的小例子的内容,更多相关内容请关注搞代码(www.gaodaima.com)!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址