通过输入某个值查询数据库中哪个表,哪个字段包含。
1.创建存储过程
CREATE OR REPLACE PROCEDURE PROC_FindValueInDB (str in VARCHAR,results out sys_refcursor)AUTHID CURRENT_USER
AS
--执行SQL语句
sqlStr VARCHAR(4000);
--判断表是否存在
tableExist number;
BEGIN
--查询表是否存在
select count(1) into tableExist from user_tables where table_name=upper('temp_Table');
if tableExist = 0 then
--创建表
sqlStr := 'CREATE TABLE temp_Table (
tablename VARCHAR(64),
columnname VARCHAR(64)
)';
execute immediate sqlStr;
else
--清空表数据
sqlStr := 'delete temp_Table';
execute immediate sqlStr;
end if;
--定义游标
declare
CURSOR tables is
SELECT o.table_name, c.column_name
FROM user_tab_columns c
INNER JOIN user_tables o ON c.table_name = o.table_name
WHERE c.data_type in ('NVARCHAR2','CHAR','VARCHAR2')
AND o.TABLESPACE_NAME in('ME2_DATA')
ORDER BY o.table_name, c.column_name;
--定义当前行
table_row tables%rowtype;
BEGIN
--打开游标
OPEN tables;
--遍历游标
LOOP
--当没有数据的时候就退出循环
EXIT WHEN tables%NOTFOUND;
--游标赋值给变量
FETCH tables INTO table_row;
sqlStr := 'insert ';
sqlStr := sqlStr || 'when (exists(SELECT NULL FROM ' || table_row.table_name || ' WHERE RTRIM(LTRIM("'|| table_row.column_name ||'")) LIKE ''%' || str || '%'')) ';
sqlStr := sqlStr || 'then into temp_Table select ''' || table_row.table_name || ''', ''' || table_row.column_name || ''' from dual ';
execute immediate sqlStr;
--结束循环
END LOOP;
--提交事务
commit;
--关闭游标
CLOSE tables;
END;
--返回结果集
open results for 'select * from temp_Table';
End PROC_FindValueInDB;
2.执行存储过程
3查看结果