作者在 2018-01-14 01:46:47 发布以下内容
脚本编程中我们常常被游标限制,因为熟悉数据库编程和面向对象编程的都知道数据库中的游标相当于软件编程中的集合,但是却没有集合那样灵活,因为游标中收到字段的限制,只能存放一个字段。但是我们的实际需求中这样是远远不够的,这里总结出一个在现有条件下可以实现需求的方法,既是游标通过结合拼串,拆串方式实现多维度单循环模式
这里是以Oracle为背景总结的,同理可得其他数据库
create or replace procedure dzd_cur_pro() is
CURSOR dzd_cur IS--创建游标
select a.glgs || '+' || a.glgsid || '+' || a.xsgs || '+' || a.xsgsid from
(select distinct glgs,glgsid,xsgs,xsgsid,bm,bmid,yywy,yywyid,xywy,xywyid from fr_xsy_khbhqk) a;
dzd_cur_text VARCHAR2(500);--创建变量,用于存储游标每次循环后的结果字符串
glgs VARCHAR2(100);--创建变量,用于存储拆分出字符串管理公司名称
glgsid VARCHAR2(100);--创建变量,用于存储拆分出字符串管理公司编号
xsgs VARCHAR2(100);--创建变量,用于存储拆分出字符串销售公司名称
xsgsid VARCHAR2(100);--创建变量,用于存储拆分出字符串销售公司编号
i number(20);--创建变量,用于记录游标循环次数
begin
i:=0;
OPEN dzd_cur;--必须要明确的打开和关闭游标
LOOP
FETCH dzd_cur--开始循环游标
INTO dzd_cur_text;--将循环结果暂时存入变量
EXIT WHEN dzd_cur%NOTFOUND;--判断游标是否为空
i:=i+1;
glgs:=substr(dzd_cur_text,1,instr(dzd_cur_text,'+')-1);--拆分字符串,instr判断字符串“+”第一次出现的位置
if i > 10 then--使游标只循环10次
return;--跳出循环
end if;
END LOOP;--结束循环
CLOSE dzd_cur;--关闭游标
end dzd_cur_pro;
****************************转载或引用需标明出处*****************************