请教几个MYSQL存储过程的问题

GaoXX 2009-11-05 06:53:56
1、Mysql里没有数组类型,我怎么把一组数据作为参数传入到存储过程里呢?
如果把数组连接成字符串传入存储过程,那在存储过程内部怎么分割成数组呢?

2、Mysql的存储过程里怎么判断有没有SQL语句执行错误,因为用到了事务,如果错误了,要在存储过程里回滚,并返回错误的值。

3、php调用mysql的存储过程,只能靠先"set @x;"变量,然后传入存储过程,执行完,再"select @x;"这种方式来取得返回结果吗?能否取得select * from table这样的可以mysql_fetch_array的数据集?

谢谢
...全文
429 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2009-11-06
  • 打赏
  • 举报
回复
1、MYSQL没有数组,最好在语言中将数组拆分成单一字符,将字符传入SP;
2、 MYSQL没有判断SQL语句执行错误的语句 ;
3、只能靠先 "set @x; "变量,然后传入存储过程,执行完,再 "select @x; "这种方式来取得返回结果吗?

你将结果存入表中,不行吗?
WWWWA 2009-11-06
  • 打赏
  • 举报
回复
1、Mysql里没有数组类型,我怎么把一组数据作为参数传入到存储过程里呢?
如果把数组连接成字符串传入存储过程,那在存储过程内部怎么分割成数组呢?

 MYSQL没有数组,可以用函数分拆字符串取得,OR在语言环境中用循环得到数组中的
数据,再传入SP中

2、Mysql的存储过程里怎么判断有没有SQL语句执行错误,因为用到了事务,如果错误了,要在存储过程里回滚,并返回错误的值。


MYSQL没有判断SQL语句执行错误的语句 

3、php调用mysql的存储过程,只能靠先 "set @x; "变量,然后传入存储过程,执行完,再 "select @x; "这种方式来取得返回结果吗?能否取得select * from table这样的可以mysql_fetch_array的数据集?

你可以将结果存入到临时表中,再取
ACMAIN_CHM 2009-11-05
  • 打赏
  • 举报
回复
[Quote]3、php调用mysql的存储过程,只能靠先 "set @x; "变量,然后传入存储过程,执行完,再 "select @x; "这种方式来取得返回结果吗?能否取得select * from table这样的可以mysql_fetch_array的数据集?[/Quote]

你可以直接在存储过程中 select 返回这个结果集如下。 另外也可以用存储函数

mysql> delimiter //
mysql>
mysql> CREATE PROCEDURE sp_GaoXX (param1 INT)
-> BEGIN
-> select param1;
-> END;
-> //
Query OK, 0 rows affected (0.61 sec)

mysql>
mysql> CALL sp_GaoXX(66)//
+--------+
| param1 |
+--------+
| 66 |
+--------+
1 row in set (0.08 sec)

Query OK, 0 rows affected (0.08 sec)

mysql>
ACMAIN_CHM 2009-11-05
  • 打赏
  • 举报
回复
[Quote]2、Mysql的存储过程里怎么判断有没有SQL语句执行错误,因为用到了事务,如果错误了,要在存储过程里回滚,并返回错误的值。[/Quote]

没有判断错误的语句。一般是用

DECLARE handler_type HANDLER
FOR condition_value [, condition_value] ...
statement


下面是MYSQL手册中的例子。
mysql> CREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //

mysql> CREATE PROCEDURE handlerdemo ()
-> BEGIN
-> DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
-> SET @x = 1;
-> INSERT INTO test.t VALUES (1);
-> SET @x = 2;
-> INSERT INTO test.t VALUES (1);
-> SET @x = 3;
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> CALL handlerdemo()//
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @x//
+------+
| @x |
+------+
| 3 |
+------+
1 row in set (0.00 sec)



ACMAIN_CHM 2009-11-05
  • 打赏
  • 举报
回复
[Quote]1、Mysql里没有数组类型,我怎么把一组数据作为参数传入到存储过程里呢?
如果把数组连接成字符串传入存储过程,那在存储过程内部怎么分割成数组呢?[/Quote]

用MYSQL的字符串处理函数了。 比如转入 1||2||2432||44
可以用 MID(), SUBSTR() 来逐字符来取,取到 || 则分解出一个参数。
也可以用SUBSTRING_INDEX() 来取。

函数的说明和用法,详见MYSQL文档。

MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧