Oracle数据库使用游标查询结果集所有数据
--案例一
DECLARE BEGIN
FOR ROW IN ( SELECT * FROM pm_work_registration WHERE work_registration_code = 'GFDJ202103310115' )
loop
-- dbms_output.put_line(row.id || '----' || row.work_registration_code);
INSERT INTO pm_registration_member ( id, main_id, work_registration_code, peoplecode, ismainhand, isapprentice, issectionchief, createdate, ext1 )
SELECT
sys_guid ( ) id,
t.id main_id,
t.work_registration_code,
t.registration_user_code peoplecode,
-- t.registration_user,
t2.ismainhand,
t2.isapprentice,
t2.issectionchief,
SYSDATE createdate,
'初始化数据' ext1
FROM
(
SELECT
id,
work_registration_code,
regexp_substr( registration_user_code, '[^,]+', 1, ROWNUM ) registration_user_code,
regexp_substr( registration_user, '[^,]+', 1, ROWNUM ) registration_user
FROM
( SELECT * FROM pm_work_registration WHERE work_registration_code = ROW.work_registration_code ) registration_user_code CONNECT BY ROWNUM <= to_number( length( regexp_replace( registration_user_code, '[^,]+' ) ) + 1 )
) t
INNER JOIN sys_people t2 ON t.registration_user_code = t2.peoplecode
WHERE
t.work_registration_code NOT IN ( SELECT work_registration_code FROM pm_registration_member );
END loop;
END;
--案例二
DECLARE BEGIN
FOR ROW IN ( SELECT * FROM QUA_CHECKLIST )
loop
dbms_output.put_line(row.ID || '----' || row.NAME );
FOR itemRow IN (SELECT rownum,t.* FROM (
SELECT qi.ITEMNAME,qc.* FROM ALMES.QUA_CHECKLISTITEM qc
LEFT JOIN ALMES.QUA_ITEM qi ON qc.ITEMID = qi.ID
WHERE qc.CHECKLISTID = ROW.ID
--'5dd23207-f8d9-4e59-ab1a-e89962bdd7b9'
ORDER BY qi.ITEMNAME ASC
)t)
LOOP
--SELECT t.SORTNO FROM QUA_CHECKLISTITEM t WHERE t.CHECKLISTID = '5dd23207-f8d9-4e59-ab1a-e89962bdd7b9';
UPDATE QUA_CHECKLISTITEM t SET t.SORTNO = itemRow.rownum WHERE t.ID = itemRow.ID;
--dbms_output.put_line(itemRow.ID || '-----' || itemRow.rownum || '----' || itemRow.ITEMNAME );
END LOOP;
END loop;
END;
--方法三 使用游标遍历表
DECLARE
--表名
myTabelName NVARCHAR2(200):='';
--行内容
myTableRowComment NVARCHAR2(200):='';
--结果
result VARCHAR2(2000):='';
--定义游标
CURSOR myCursor IS SELECT * FROM 结果集(表名/视图名/查询结果) ORDER BY (结果集中的列名);
--定义游标记录类型
myRecord myCursor%ROWTYPE;
BEGIN
--打开游标
OPEN myCursor;
--判断打开成功
IF myCursor %ISOPEN THEN
---------------------游标打开成功
BEGIN
LOOP
--循环获取记录集
BEGIN
FETCH myCursor into myRecord;
--游标的FOUND属性判断是否有记录
IF myCursor%FOUND THEN
BEGIN
myTabelName:='TEC_PARTTEC';
myTableRowComment:=myRecord.ID||' '||myRecord.CREATEDATE||' '
||myRecord.CREATEUSER||' '||myRecord.ORGANIZATIONID||' '
||myRecord.PARTID||' '||myRecord.PROCESSTYPE||' '
||myRecord.VERSION||' '||myRecord.REMARK||' '
||myRecord.STATE;
result:='表名 '||myTabelName||' 列值 '||myTableRowComment;
result:=myTabelName||' '||myTableRowComment;
DBMS_OUTPUT.PUT_LINE(result);
END;
ELSE
--游标中的记录为空 退出
EXIT;
--结束IF语句
END IF;
--循环获取记录结束
END LOOP;
END
ELSE
DBMS_OUTPUT.PUT_LINE('游标没有打开');
END IF;
CLOSE myCursor;
END;
本文作者:Journey&Flower
本文链接:https://www.cnblogs.com/JourneyOfFlower/p/10876575.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步