【oracle】游标使用 –简单案例CURSOR 菜鸡教程
-先说下我们今天要干的事情:
- 使用 游标 实现自动从 test1 将电话号码 插入 test2 表。
- 叼哥 肯定会说,这跟游标有个 吊毛 关系,非也,我们如果想批量 从test1 表中,将数据批量插入test2 中,必然会使用到游标。
- 首先肯定我们先要知道,什么是游标,游标有什么作用,开始lz 也是个屌丝,压根不知道这是搞毛用的,为此还被之前我们组的 大佬 冷嘲热讽 了一番。
- 其实说白了,也没什么大不了的,听起来高大上的东西, 就类似 java 的集合list,但是相比之下又有所不同,又有点像 是一个 对象 ,但又跟对象有点不同, 说白了其实就是
集合跟对象的合体
结合了集合list和对象的优点
下边会具体说明。
1.先创建两张测试表
-- 创建表test1
create table test_1(
id varchar2(32),
tel varchar2(100)
);
-- 设置主键
alter table test_1
add constraint PK_test_1 primary key (ID);
-- 创建表test2
create table test_2(
id number(5),
tel varchar2(100)
);
-- 设置主键
alter table test_2
add constraint PK_test_2 primary key (ID);
-- 创建一些测试数据
insert into test_1 values((select sys_guid() from dual),'15691043321');
insert into test_1 values((select sys_guid() from dual),'15691043322');
如图:
我们查看下test_1
的数据
- 创建一个自增序列,也可以不创建,我这是为了给你们清楚展示,数据数量
create sequence test_2_seq start with 1 increment by 1; -- 创建一个test_2_seq x的序列
-游标 SQL
DECLARE
CURSOR test_1_cur IS -- test_1_cur 游标名称
SELECT T.TEL FROM test_1 T; -- 查询test_1 数据
tel_list test_1_cur%ROWTYPE;
BEGIN
OPEN test_1_cur; -- 打开游标
LOOP -- 循环游标
FETCH test_1_cur -- 遍历游标
INTO tel_list; --tel_list 查询出来的所有结果存放在这个里边
EXIT WHEN test_1_cur%NOTFOUND;
if tel_list.tel is not null then-- 查询出来后结果不为空的 插入到test_2表中
INSERT INTO test_2 VALUES
(test_2_seq.nextval,tel_list.tel);--这就是为什么结合了java list和对象的原因了,既能遍历,又能用对象方式取值
end if;
COMMIT; -- 提交
END LOOP; -- 结束循环
CLOSE test_1_cur; -- 关闭游标
END;
最后我,我们看下结果
脚注
各位看官老爷,看来有没有收获,欢迎大家相互探讨,如有不足支出,还望不吝指教1.
- ———–笑皮脸 O(∩_∩)O哈哈~ **. ↩