搜索oracle表里的内容.txt
根据提供的文件信息,我们可以归纳出以下相关知识点: ### 一、Oracle数据库中的元数据查询 在Oracle数据库中,用户可以通过查询系统目录视图来获取关于数据库对象(如表、列等)的信息。这部分代码主要利用了`DBA_TABLES`和`DBA_TAB_COLUMNS`这两个系统视图。 #### 1. DBA_TABLES - **视图介绍**:`DBA_TABLES`视图包含了所有可被当前用户访问的所有表的信息。 - **常用字段**: - `OWNER`:表的所有者。 - `TABLE_NAME`:表的名字。 #### 2. DBA_TAB_COLUMNS - **视图介绍**:`DBA_TAB_COLUMNS`视图包含了所有可被当前用户访问的所有表的列的信息。 - **常用字段**: - `OWNER`:表的所有者。 - `TABLE_NAME`:表的名字。 - `COLUMN_NAME`:列的名字。 - `DATA_TYPE`:列的数据类型。 - `COLUMN_ID`:列的编号,用于排序列。 ### 二、游标(Cursor)的应用 游标是PL/SQL中的一个重要特性,它可以处理查询结果集,并且可以逐行读取数据。这段代码中定义了两个游标: #### 1. cur_tab 游标 - **定义**:用于查询指定所有者的表信息。 - **条件**: - `OWNER = 'DEV_VGOP'` 或 `OWNER = 'SALE'`:指定表的所有者。 - `TABLE_NAME LIKE 'TC%'`:指定表名以"TC"开头。 #### 2. cur_col 游标 - **定义**:用于查询指定所有者和表名的列信息。 - **参数**: - `v1`:表的所有者。 - `v2`:表的名字。 - **条件**: - `OWNER = v1`:指定所有者。 - `TABLE_NAME = v2`:指定表名。 ### 三、字符串拼接和条件判断 在这段代码中,使用了字符串拼接和条件判断来进行动态SQL语句的构造。 #### 1. 字符串拼接 - 使用`||`符号进行字符串拼接,例如`v_column := v_column || '||' || v_column_name;`。 #### 2. 条件判断 - 使用IF语句来进行条件判断,例如: ```sql IF cr_col.data_type = 'VARCHAR2' OR cr_col.data_type = 'CHAR' THEN v_column_name := cr_col.column_name; ELSE v_column_name := 0; END IF; ``` ### 四、执行动态SQL - **实现方式**:通过`EXECUTE IMMEDIATE`语句来执行动态构建的SQL语句。 - **目的**:统计每个表中有多少行包含特定字符模式(如“%”)。 ### 五、输出结果 - 使用`DBMS_OUTPUT.PUT_LINE`函数输出结果到控制台。 ### 六、总结 这段代码的主要功能是遍历指定所有者的表,并对每个表进行检查,找出哪些列是`VARCHAR2`或`CHAR`类型,然后构建一个SQL查询来统计这些表中有多少行包含特定字符模式。这在实际应用中非常有用,尤其是在需要快速查找或过滤大量数据时。通过这种方式,可以有效地利用Oracle数据库的强大功能来处理复杂的数据查询需求。
--表内容搜索
--有N个表,查找哪个表里有自己需要的字符。例如,我要找哪些表里的数据有“飞信”。共2处需要改动。
--1这里需要确定哪些表
cursor cur_tab is
select table_name, owner
from dba_tables
where 1 = 1
and owner = 'DEV_VGOP'
-- and table_name = 'TD_B_SERVICE'
and 1=1;
cursor cur_col(v1 varchar2, v2 varchar2) is
SELECT column_name, data_type, column_id
FROM DBA_TAB_COLUMNS
where owner = v1
and table_name = v2
order by column_id;
v_column varchar2(4000);
v_ct number;
v_ct2 number;
v_column_name varchar2(30);
begin
for cr_tab in cur_tab loop
v_column := null;
for cr_col in cur_col(cr_tab.owner, cr_tab.table_name) loop
if cr_col.data_type='VARCHAR2' OR cr_col.data_type='CHAR' THEN
v_column_name:=cr_col.column_name;
v_column_name:=0;
END IF;
if cr_col.column_id = 1 then
v_column := v_column_name;
else
v_column := v_column || '||' || v_column_name;
end if;
end loop;
--2确定搜索内容
-- v_column:='select sum(1)||''/''||sum(case when aaa like ''%飞信%'' then 1 else 0 end ) from (select '||v_column||' aaa from '||cr_tab.owner||'.'||cr_tab.table_name||') ';
v_column:='select sum(1),sum(case when aaa like ''%飞信%'' then 1 else 0 end ) from (select '||v_column||' aaa from '||cr_tab.owner||'.'||cr_tab.table_name||') ';
execute immediate v_column into v_ct,v_ct2 ;
if v_ct2>=1 then
dbms_output.put_line(cr_tab.table_name||'总条数:'||v_ct||'/关键词条数:'||v_ct2 );
end if;
end loop;
--dbms_output.put_line(v_column);
end;
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助