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

本文介绍如何使用 Oracle 的匿名块、光标及 fetch 实现带有条件限制的数据迁移。具体操作包括定义光标获取源表 ID,并通过循环判断 ID 是否为 5 的倍数,若是则执行 SQL 语句将数据迁移到目标表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

晚上的时间,都是我自己的,我就好好的利用这个时间来学习学习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;
/
### Git 使用教程 #### 一、Git 是什么 Git 是一种分布式版本控制系统,允许开发者跟踪文件的变化并管理不同版本之间的差异。通过创建项目的历史记录副本,团队成员可以在不影响他人工作的前提下自由修改源码。 - 版本库位于工作区的一个隐藏目录 `.git` 中[^3]。 - 这个区域用于安全存放所有的提交数据,其中包括各个历史版本的信息。 - `HEAD` 指针始终指向最新的已提交版本。 #### 二、基本命令介绍 为了初始化一个新的 Git 库或克隆现有的仓库: ```bash git init ``` 或是从远程服务器获取整个项目的拷贝: ```bash git clone <repository_url> ``` 切换分支或检出特定的提交对象可以使用如下指令: ```bash git checkout <branch_name_or_commit_id> ``` 当准备向暂存区添加新更改时,可单独指定某个文件,也可以一次性加入全部改动过的文件: ```bash git add file_path # 单独添加某文件 git add . # 添加当前目录下的所有变更 ``` 如果想要移除某个文件,则需执行删除操作,并告知 Git 不再追踪该文件的状态: ```bash git rm filename # 移除单个文件 git rm -r directory/ # 移除整个目录及其子项 ``` 完成上述准备工作之后,就可以为这些变化撰写描述性的日志消息并将它们正式保存至本地仓库了: ```bash git commit -m "commit message" ``` 最后一步是把更新同步回远端服务器上的官方存储库内: ```bash git push origin main ``` 请注意,在较新的 Git 版本中,默认的主要分支名称可能是 `main` 而不是旧版中的 `master`。 --- ### 数据库游标概念及用法 游标是一种临时数据库对象,它提供了一种机制来逐行处理查询返回的结果集。这使得应用程序能够更灵活地遍历和操纵大量数据而无需一次性加载整个结果集合入内存之中。 定义游标的典型SQL语句结构如下所示: ```sql DECLARE cursor_name CURSOR FOR SELECT statement; OPEN cursor_name; -- 打开游标以便读取数据 FETCH NEXT FROM cursor_name INTO @variable_list; -- 获取下一行数据 CLOSE cursor_name; -- 关闭游标释放资源 DEALLOCATE cursor_name;-- 彻底销毁游标 ``` 在实际应用过程中,通常会结合循环控制流逻辑实现批量处理任务的功能需求。例如,对于每一条被提取出来的记录执行某些业务规则验证或者更新其他内的关联信息等动作。 重要的是要注意性能影响因素——频繁开启关闭游标可能会带来额外负担;因此应当谨慎设计程序流程以减少不必要的开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值