mysql 存储过程处理array

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 存储过程处理array相关的知识,希望对你有一定的参考价值。

mysql存储过程通过一个查询得到一个array,再通过循环 inster array里的信息到另一个数据表。

请个个例子

如果你的array不需要处理,直接就可以insert into

例如:
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好像名称不同,可以这么用吗?

参考技术A 第一步: select * from user 查找到数据集赋值给$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存储过程——异常处理

有时候,不希望存储过程抛出错误中止执行,而是希望返回一个错误码。 MySQL 支持异常处理,通过定义 CONTINUE/EXIT 异常处理的 HANDLER 来捕获 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 /无数据 / 其他异常)。其中, FOR 后面可以改为 SQLWARNING, NOT FOUND, SQLEXCEPTION 来指示所有异常都处理,相当于 oracle 中的 others 。例如,当不进行异常处理时,以下代码将直接抛出一个 ERROR 1062 (23000) 错误:

         Sql code 4-1:

 

[c-sharp] view plain copy
 
  1. CREATE PROCEDURE test_proc_ins1(  
  2.          IN i_id INT,  
  3.          IN i_name VARCHAR(100)  
  4. )  
  5. BEGIN  
  6.          INSERT INTO testproc VALUES (i_id,i_name);  
  7.          INSERT INTO testproc VALUES (i_id,i_name);  
  8. END;  

 

  经过异常处理后,可以避免抛出错误,而是定义一个返回参数 o_ret 赋予特殊值来表示失败,这样,在java 代码中,可以通过获取返回值而不是捕获异常的方式来处理业务逻辑。例如将返回值设置为 -1:

         Sql code 4-2:

 

[c-sharp] view plain copy
 
  1. CREATE PROCEDURE test_proc_ins1(  
  2.          IN i_id INT,  
  3.          IN i_name VARCHAR(100),  
  4.          OUT o_ret INT)  
  5. BEGIN  
  6.          DECLARE EXIT HANDLER FOR SQLSTATE ‘23000‘ set o_ret = -1;  
  7. -- 也可以这样使用:  
  8. -- DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION set o_ret=-1;  
  9.          INSERT INTO testproc VALUES (i_id,i_name);  
  10.          INSERT INTO testproc VALUES (i_id,i_name);  
  11.          set o_ret = 1;  
  12. END;  

 

以上是关于mysql 存储过程处理array的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程处理json格式内容

MySQL 存储过程错误处理

MySQL 存储过程错误处理

Mysql从入门到入魔——8. 视图存储过程事务处理

MySQL存储过程错误处理

Oracle存储过程中,查询结果有多行如何赋值