在下的一个用户里面有300多张表,我想输入一个值后,就显示此值所在的表名与字段名,请问能否实现,怎么实现?
谢谢
你好,我是想一次就查询所有的表的表名与字段。
oracle能否遍历数据库里所有表的字段与值
答案:3 悬赏:10 手机版
解决时间 2021-02-25 22:22
- 提问者网友:捧腹剧
- 2021-02-25 15:25
最佳答案
- 五星知识达人网友:杯酒困英雄
- 2021-02-25 16:16
不知道你是写程序用,还是找数据用。写程序的话,一步到位,可能比较复杂!
下面附一点找数据的较笨的方法!看对你有没有用,以用户SCOTT为例:
1.dba_tab_columns有某个用户的所以表和列等信息:select table_name,column_name from dba_tab_columns where owner='SCOTT'
2.查看用户的表所使用的数据类型有哪些:select distinct Data_type from (select * from dba_tab_columns where owner='SCOTT') A 通过查看,就可以知道,文本型有哪些?如:是否有char, varchar2等
3.创建一个表,用于保留那些表名和字段:CREATE TABLE SCOTT.TCOL(A VARCHAr2(50), B VARCHAr2(50))
4.因为SCOTT用户的字段类型较少,下面以找NUMBER类型值为1100的表名与字段在SQLPLUS下运行如下代码(如果数值多的话,可以用 in('NUMBER',...)格式。
set serveroutput on
delete from scott.TCOL;
commit;
declare
cursor my_cursor is
select table_name,column_name from dba_tab_columns where owner='SCOTT' and DATA_TYPE='NUMBER';
v_table varchar2(50);
v_col varchar2(50);
v_sql varchar2(4000);
begin
open my_cursor;
loop
fetch my_cursor into v_table,v_col;
dbms_output.put_line(v_table);
exit when my_cursor%NOTFOUND;
v_sql:='Insert into SCOTT.TCOL(A,B) select '||''''|| v_table||''''||','||''''|| v_col||''''||' from SCOTT.'||v_table||' where '||v_col||'=1100';
dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql;
commit;
end loop;
close my_cursor;
end;
5.最后执行select * from scott.tcol,就可以看到结果! 如果有用,自己再整理成一个存储过程.
以上仅参考!
下面附一点找数据的较笨的方法!看对你有没有用,以用户SCOTT为例:
1.dba_tab_columns有某个用户的所以表和列等信息:select table_name,column_name from dba_tab_columns where owner='SCOTT'
2.查看用户的表所使用的数据类型有哪些:select distinct Data_type from (select * from dba_tab_columns where owner='SCOTT') A 通过查看,就可以知道,文本型有哪些?如:是否有char, varchar2等
3.创建一个表,用于保留那些表名和字段:CREATE TABLE SCOTT.TCOL(A VARCHAr2(50), B VARCHAr2(50))
4.因为SCOTT用户的字段类型较少,下面以找NUMBER类型值为1100的表名与字段在SQLPLUS下运行如下代码(如果数值多的话,可以用 in('NUMBER',...)格式。
set serveroutput on
delete from scott.TCOL;
commit;
declare
cursor my_cursor is
select table_name,column_name from dba_tab_columns where owner='SCOTT' and DATA_TYPE='NUMBER';
v_table varchar2(50);
v_col varchar2(50);
v_sql varchar2(4000);
begin
open my_cursor;
loop
fetch my_cursor into v_table,v_col;
dbms_output.put_line(v_table);
exit when my_cursor%NOTFOUND;
v_sql:='Insert into SCOTT.TCOL(A,B) select '||''''|| v_table||''''||','||''''|| v_col||''''||' from SCOTT.'||v_table||' where '||v_col||'=1100';
dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql;
commit;
end loop;
close my_cursor;
end;
5.最后执行select * from scott.tcol,就可以看到结果! 如果有用,自己再整理成一个存储过程.
以上仅参考!
全部回答
- 1楼网友:话散在刀尖上
- 2021-02-25 18:02
你数据多 要想查全 实在不行 就一次查1w个 多查几次 还是慢就只能等了 结果集处理 那要问你了 你把他调出来 干什么 你就干什么呗 推荐放在excel里面
- 2楼网友:渊鱼
- 2021-02-25 16:28
你数据多 要想查全 实在不行 就一次查1w个 多查几次 还是慢就只能等了
结果集处理 那要问你了 你把他调出来 干什么 你就干什么呗 推荐放在excel里面
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯