微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/oracle/210856.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐