ORACLECURSOR游标详解

浏览:
字体:
发布时间:2013-12-12 14:51:04
来源:
DECLARE
sqlStr VARCHAR2(2000); --拼写sql
flag int; --判断是否存在
col_name VARCHAR2(100); --字段名字
tab_name VARCHAR2(100); --表名
col_type VARCHAR2(100); --表名
operator_str VARCHAR2(100) := '=';
FindUser VARCHAR2(50) :='ERSAFETY'; --要查找的用户
FindValues VARCHAR2(50) :=' USID20111128000292 '; --**要查找的值
Findtype1 VARCHAR2(50) := 'VARCHAR2'; --要查找的值类型 数字类型特殊处理
Findtype2 VARCHAR2(50) := 'CHAR'; --要查找的值类型
Findtype3 VARCHAR2(50) := 'VARCHAR'; --要查找的值类型
isLike boolean := false; --是否模糊查找
cursor cur is --定义游标
select *
from all_tab_columns a
-- where a.OWNER = FindUser
where a.Data_type in (Findtype1, Findtype2, Findtype3)
-- and a.Table_Name like 'BD_%' ;--要查找的表的过滤
order by Table_Name, Data_type;
begin
if isLike then
operator_str := ' like ';
FindValues := '''%' || FindValues || '%''';
else
operator_str := ' = ';
FindValues := '''' || FindValues || '''';
end if;
for i in cur loop
tab_name := i.table_name;
col_name := i.column_name;
if col_name = 'USID' &instr(col_name ,'$')=0 then
col_type := i.Data_type;
sqlStr := ' select count(*) from '||i.owner||'."'|| tab_name || '" where '||
col_name || operator_str || FindValues;
dbms_output.put_line(sqlStr || ' -----' || flag);
execute immediate sqlStr
into flag;
if flag > 0 then
dbms_output.put_line(' select ' || col_name || ' from ' || tab_name ||
' where ' || col_name || operator_str ||
FindValues || ' ---' || col_type || '---' || flag);
end if;

end if;
end loop;

end;

当然,游标也是可以省略的,如下所示:

begin
for xx in (select t.OWNER, t.TABLE_NAME, t.COLUMN_NAME
from dba_tab_columns t
where t.OWNER = 'SCOTT') loop

--这样直接遍历sql的查询结果也是可以的。
begin
v_Sql := 'select count(1) from ' || xx.owner || '.' || xx.table_name ||
--使用方法同上。
end;
end loop;
end;

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();