• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL 存储过程带in和out参数以及PHP,PB如何调用的小例子

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL,in和out,PB等相关知识,希望本文的分享对您有所帮助
最简单的例子:

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 ;
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 |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
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如何调用的小例子的内容,更多相关内容请关注微课江湖()!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05MSSQL SERVER中的BETWEEN AND的使用
  • 2017-05-11在Centos 5.5 上编译安装mysql 5.5.9
  • 2018-12-05如何恢复数据库备份到一个已存在的正在使用的数据库上
  • 2017-05-11MySQL中表复制:create table like 与 create table as select
  • 2018-12-05MySQL中文乱码如何解决?
  • 2018-12-05有关排他锁的课程推荐10篇
  • 2018-12-05mysql中关于char和varchar的区别
  • 2018-12-05Mysql获取id最大值、表的记录总数等相关问题的方法汇总_MySQL
  • 2017-05-11mysql如何查询某一时间段内没有卖出的商品
  • 2018-12-05MySQL 分表优化试验代码

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • php实现后期静态绑定
    • ORACLE PL/SQL 触发器编程篇介绍
    • UDP传输时IP层的分片是怎么回事?
    • MySQL 中处理 Null 时要注意两个陷阱
    • mongodb管理与安全认证
    • 详解mysql数据库中文乱码问题
    • 讲述一个mysql 数据库恢复的实例
    • PL/SQL编程经验小结开发者网络Oracle
    • SQL server2000的理论认识
    • MySQL中explain的使用以及性能分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有