概述
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;
最后
以上就是灵巧学姐为你收集整理的ORACLE CURSOR 游标详解的全部内容,希望文章能够帮你解决ORACLE CURSOR 游标详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复