mysql 存储过程处理array
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 存储过程处理array相关的知识,希望对你有一定的参考价值。
mysql存储过程通过一个查询得到一个array,再通过循环 inster array里的信息到另一个数据表。
请个个例子
例如:
INSERTINTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name
这种格式不能加values追问
array需要处理的
追答如果你要对select返回的结果处理,就没必要全部使用mysql语句来实现,结合后台语言,才能达到你的效果
追问那就用php给个完整的例子如何?
追答mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db("mydb");
$result = mysql_query("SELECT id, name FROM mytable");
//假设对 name进行简单处理下 放到一个需要插入的array
$array = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
$array[] = "$row['id'], $row['name']";
//插入另外一个表
foreach ( $array as $item)
mysql_query( " insert into table2 (content) values ($item)")
mysql_free_result($result);
$result = mysql_query("SELECT id, name FROM mytable");
//假设对 name进行简单处理下 放到一个需要插入的array
$array = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
$array[] = "$row['id'], $row['name']";
这个部分的$result 和$array好像名称不同,可以这么用吗?
第二步: foreach ($array as $k=>$v) 遍历数据集$array
inster...执行插入语句
追问
能给个假设的例子吗?
包括完整语法,这个可以在存储过程里直接使用吗
K和V都是什么意思?
username只有1列结果,是不是没有key这说?
inster 的时候username这个变量是什么
这就是很完整的了,,,。连库,执行sql语句,查询,遍历查询结果,在遍历过程中执行插入语句
参考技术B 说清楚你的要求 看到了回 我 ~追问第一步: select * from user 查找到数据集赋值给$array
第二步: foreach ($array as $k=>$v) 遍历数据集$array
inster...执行插入语句
完全用存储过程来实现这个功能
你主要是PHP 语言还是MYSQL SQL语言可以存储过程来执行你上面的语言 刚才我研究了一下~~~ 给你的话 你看的明白么 = 。= SQL 有他自己的一个 语言方式~~~ 你这么调用还不如用PHP 写个循环 如果你想方便点的话 你可以写个方法 调用方法 和SQL的存储过程 我觉得大致一样 ~~~ 研究SQL时间还不如稳固自己的PHP 、、、 你还需要SQL的存储么。。。
存储就是写个SQL的方法语句 上面有他的逻辑 用的时候直接调用方便了自己的速度 跟PHP写方法大致差不多。。 你还不如直接PHP 写个方法还比较熟练
Mysql存储过程——异常处理
http://blog.csdn.net/crazylaa/article/details/5368421
有时候,不希望存储过程抛出错误中止执行,而是希望返回一个错误码。 MySQL 支持异常处理,通过定义 CONTINUE/EXIT 异常处理的 HANDLER 来捕获 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 /无数据 / 其他异常)。其中, FOR 后面可以改为 SQLWARNING, NOT FOUND, SQLEXCEPTION 来指示所有异常都处理,相当于 oracle 中的 others 。例如,当不进行异常处理时,以下代码将直接抛出一个 ERROR 1062 (23000) 错误:
Sql code 4-1:
- CREATE PROCEDURE test_proc_ins1(
- IN i_id INT,
- IN i_name VARCHAR(100)
- )
- BEGIN
- INSERT INTO testproc VALUES (i_id,i_name);
- INSERT INTO testproc VALUES (i_id,i_name);
- END;
经过异常处理后,可以避免抛出错误,而是定义一个返回参数 o_ret 赋予特殊值来表示失败,这样,在java 代码中,可以通过获取返回值而不是捕获异常的方式来处理业务逻辑。例如将返回值设置为 -1:
Sql code 4-2:
- CREATE PROCEDURE test_proc_ins1(
- IN i_id INT,
- IN i_name VARCHAR(100),
- OUT o_ret INT)
- BEGIN
- DECLARE EXIT HANDLER FOR SQLSTATE ‘23000‘ set o_ret = -1;
- -- 也可以这样使用:
- -- DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION set o_ret=-1;
- INSERT INTO testproc VALUES (i_id,i_name);
- INSERT INTO testproc VALUES (i_id,i_name);
- set o_ret = 1;
- END;
以上是关于mysql 存储过程处理array的主要内容,如果未能解决你的问题,请参考以下文章