利用cursor及fetch将一个表中符合条件的记录拷贝到另一个表中

晚上的时间,都是我自己的,我就好好的利用这个时间来学习学习ORACLE,去年学过的东西都忘得差不多了,现在趁机会还没有忘完之前拿起来。
今天看了一下匿名块、函数、过程等,想起原来用过光标cursor及fetch,也是快忘得差不多了,那今天就来试试把一个表里面的数据拷贝到另外一个结构完全相同的表里面,不过,有一个条件就是原表的ID必须为5的倍数的才能够被插入,否则不取。
在开始之前,还是先来复习一点东西:
1、匿名块的格式基本就如下面所示
[declare]
/*变量定义区,也可做初使化等*/
begin
/*开始区,执行顺序SQL语句*/
[exception]
/*异常处理区,可进行异常处理,异常的抛出使用raise关键字*/
end;
其中方框里面的为可选项,不作为必须。
2、fetch
1)首先要定义cursor,如 cursor id_cur is select id from components
2)然后打开cursor: open id_cur
3)第三是使用fetch从cursor并保存到变理中
4)第四关闭cursor
那就把上面说到的功能实现,代码如下:

declare
       num_id integer;/ *定义变量*/
       sql_str varchar(1000);
       cursor id_cur is select id from components; /*用光标取ID*/
begin
       open id_cur; /*打开光标执行*/
       loop/*一直执行下去*/
            fetch id_cur into num_id; /*根据光标,取出ID号到变量中*/
            exit when id_cur %notfound; /*没有记录时就退出*/
            if mod(num_id,5)=0 then /*如果记录ID为5的倍数,就执行下面的插入*/
               /*下面生成一条SQL语句*/
               sql_str:='insert into components2 select * from components where id='|| num_id;
               /*立即执行生成的SQL语句*/
               execute immediate sql_str;
            end if; /*记住:条件的结束后都要加结束束‘;’*/
       end loop;
       close id_cur; /*关闭光标*/
end;
/  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下 PHP 代码来实现将一个数据库中的表结构及内容全部复制到新建的数据库中: ```php // 原数据库信息 $source_host = '原数据库主机名'; $source_username = '原数据库用户名'; $source_password = '原数据库密码'; $source_database = '原数据库名'; // 目标数据库信息 $target_host = '目标数据库主机名'; $target_username = '目标数据库用户名'; $target_password = '目标数据库密码'; $target_database = '目标数据库名'; // 连接原数据库 $source_conn = mysqli_connect($source_host, $source_username, $source_password, $source_database); if (!$source_conn) { die('连接原数据库失败:' . mysqli_connect_error()); } // 连接目标数据库 $target_conn = mysqli_connect($target_host, $target_username, $target_password, $target_database); if (!$target_conn) { die('连接目标数据库失败:' . mysqli_connect_error()); } // 获取原数据库所有表名 $tables = mysqli_query($source_conn, 'SHOW TABLES'); if (!$tables) { die('获取表名失败:' . mysqli_error($source_conn)); } // 循环复制每个表 while ($table = mysqli_fetch_row($tables)) { $table_name = $table[0]; // 获取原表结构 $create_table_sql = mysqli_query($source_conn, 'SHOW CREATE TABLE ' . $table_name); if (!$create_table_sql) { die('获取表结构失败:' . mysqli_error($source_conn)); } $create_table_data = mysqli_fetch_assoc($create_table_sql); $create_table_sql_str = $create_table_data['Create Table']; // 在目标数据库中创建表 $create_table_result = mysqli_query($target_conn, $create_table_sql_str); if (!$create_table_result) { die('在目标数据库中创建表失败:' . mysqli_error($target_conn)); } // 复制数据 $copy_data_result = mysqli_query($target_conn, 'INSERT INTO ' . $table_name . ' SELECT * FROM ' . $source_database . '.' . $table_name); if (!$copy_data_result) { die('复制数据失败:' . mysqli_error($target_conn)); } } // 关闭连接 mysqli_close($source_conn); mysqli_close($target_conn); ``` 在代码中,首先需要分别连接原数据库和目标数据库。然后获取原数据库中所有的表名,并循环复制每个表。对于每个表,需要先获取其表结构,然后在目标数据库中创建相应的表,并将原表中的数据复制到目标表中。最后,需要关闭数据库连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值