oracle查询一个字符串所在表

前端之家收集整理的这篇文章主要介绍了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;

原文链接:https://www.f2er.com/oracle/210856.html

猜你在找的Oracle相关文章