oracle查询一个字符串所在表



我先建了一个表 create table data_table (tablename varchar2(40),clo varchar2(40),data varchar2(40),exe_date date); declare c varchar2(30); begin -- Call the procedure c :='AAFUNCT110900000066'; p_data (c); end; --select count(*) from data_table 创建或修改存储过程 create or replace procedure p_data ( in_data in varchar2 --输入的参数,就是上边我输入的abc ) is --设置变量,你看名字应该基本都能看懂 v_tablename varchar2(40); v_cloumn_name varchar2(40); --v_date_type varchar2(40); v_count int; v_sql varchar2(2000); v_data_type varchar2(40); --按照如下条件取出游标,其中USERS是表空间,那个地方你可以改 cur_data SYS_REFCURSOR; begin--判断是数字 if Lower(in_data) = Upper(in_data) then v_sql :=' select A.TABLE_NAME,A.COLUMN_NAME,A.data_type from USER_TAB_COLUMNS A,TABS B WHERE A.TABLE_NAME = B.TABLE_NAME' ||' AND B.tablespace_name like ''NNC_%'' and (A.data_type = ''NUMBER'') ORDER BY A.TABLE_NAME,A.COLUMN_NAME;'; --USERS open cur_data for v_sql;--打开游标 loop fetch cur_data into v_tablename,v_cloumn_name,v_data_type; exit when cur_data%notfound; --取出游标里的各个变量,拼成动态sql语句, if v_data_type = 'NUMBER' then v_sql := 'select count(*) from ' || v_tablename || ' where ' || v_cloumn_name || ' = ' ||in_data; end if; execute immediate v_sql into v_count; --如果查询出来的条数大于,则将查询中的表名,字段名和输入的内容插入到我建的那个表中 if v_count > 0 then v_sql := 'insert into data_table values (''' || v_tablename || ''',''' || v_cloumn_name || ''',''' || in_data || ''',sysdate)'; execute immediate v_sql; commit; end if; end loop; close cur_data; else--不是数字 v_sql :=' select A.TABLE_NAME,TABS B WHERE A.TABLE_NAME = B.TABLE_NAME' ||' AND B.tablespace_name like ''NNC_%'' and (A.data_type = ''VARCHAR2'') ORDER BY A.TABLE_NAME,A.COLUMN_NAME'; --USERS open cur_data for v_sql;--打开游标 loop fetch cur_data into v_tablename,v_data_type; exit when cur_data%notfound; --取出游标里的各个变量,拼成动态sql语句, if v_data_type = 'VARCHAR2' then v_sql := 'select count(*) from ' || v_tablename || ' where instr(' || v_cloumn_name || ',''' || in_data || ''')>0'; else v_sql := 'select count(*) from data_table where 1=2'; end if; execute immediate v_sql into v_count; --如果查询出来的条数大于,则将查询中的表名,字段名和输入的内容插入到我建的那个表中 if v_count > 0 then v_sql := 'insert into data_table values (''' || v_tablename || ''',''' || in_data || ''',sysdate)'; execute immediate v_sql; commit; end if; end loop; close cur_data; end if; --end; end p_data;

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...