oracle中已经知道一个具体值,如何根据该值查询出含有该值的表名和列名?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中已经知道一个具体值,如何根据该值查询出含有该值的表名和列名?相关的知识,希望对你有一定的参考价值。
如图:已经知道D3这个值,用什么语句可以根据D3查询出含有D3值的表名:“IQC_PPAP_PROJECTS”和列名:“VEHICLEMODEL”
如何查询oracle一个数据库中包含有某个特定值的所有表及字段名-我这里说的字段名跟列 是同一个意思
select column_name,
table_name,data_type ,data_length,data_precision,data_scale from user_tab_columns where column_name='字段名';
--根据字段名查出相关的表名出来。记录下来
--然后对查出来的表进行查询,找到含这内容字段的表
select * from 表名 where 字段名='xiaoming'追问
当前的问题是只知道一个具体值,此值既非表名也非列名,无法使用select * from 表名 where 字段名='xiaoming'来实现!
参考技术A 好久没用oracles数据库了。我记得里面有个查询所有表名的,系统表all_tables 你看看这个表中有没有字段的。然后在查询条件
如果这个表中没有表的字段,那就把表名都粘出来。然后where加条件。把有数值的粘出来追问
COLUMN_NAME可以代表任意列名,请问有什么可以代表任意行值?
参考技术B 你这个需求很不好做,就算是做了,也不一定有实际应用意义。因为性能不敢保证。当然还是可以做到的。思路如下。首先,查询系统自带试图all_tables或者user_tables,如果可以指定用户名更好。
然后,循环每一个表的每一个字符串字段,看是不是有包含D3的值 ,如果有记下来表名字段名,就这样一直循环。
因为数据库表有可能很多,而且说不定哪个字段有了D3,还有是不是考虑clob字段,等等。所以最终不一定是你想要的结果。当然如果你可以指定某几个表或者表名,字段名有某些规律的话,会好很多。
谨慎操作追问
请问在试图all_tables查询每一张表是否包含D3的值 ,用SQL语句怎么表示?
参考技术C all_tables 你看看这个表中有没有字段的。然后在查询条件追问COLUMN_NAME可以代表任意列名,请问有什么可以代表任意行值?
如何在 Oracle 中调试 PL/SQL 集合的值?
【中文标题】如何在 Oracle 中调试 PL/SQL 集合的值?【英文标题】:How can I debug the value of a PL/SQL collection in Oracle? 【发布时间】:2010-10-21 19:17:36 【问题描述】:我正在调试一个...返回某些值的过程。该程序似乎使用DBMS_SQL.DESCRIBE_COLUMNS2
,直到现在我都不知道。
DBMS_SQL.DESCRIBE_COLUMNS2
过程的输出变量之一是一个集合,我想检查该值是否返回到该集合中 - 我如何观察/观察/检查该值?
我使用 Allround Automations 的 PL/SQL Developer,但也有 Oracle 的 SQL Developer 作为我可以使用的工具。
尝试像这样遍历集合;
For Val In 1..M_Rec_Tab.Count Loop
Dbms_Output.Put_Line( M_Rec_Tab(Val) );
end loop;
但这会引发PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'
。
M_Rec_Tab 被声明为Dbms_Sql.Desc_Tab2
类型。
Dbms_Sql.Desc_Tab2
声明为desc_tab2 is table of desc_rec2 index by binary_integer
我使用的是 Oracle 10g R2 (10.2.0.1.0)
【问题讨论】:
遍历内容,使用DBMS_OUTPUT.PUT_LINE
打印出值?
抱歉,我没有使用过 Oracle 集合,否则我会提供更多帮助。
【参考方案1】:
你就快到了……再走一步。 desc_tab2的定义是:
TYPE desc_rec2 IS RECORD (
col_type binary_integer := 0,
col_max_len binary_integer := 0,
col_name varchar2(32767) := '',
col_name_len binary_integer := 0,
col_schema_name varchar2(32) := '',
col_schema_name_len binary_integer := 0,
col_precision binary_integer := 0,
col_scale binary_integer := 0,
col_charsetid binary_integer := 0,
col_charsetform binary_integer := 0,
col_null_ok boolean := TRUE);
所以你可以遍历集合并输出记录中每个字段的值:
For Val In 1..M_Rec_Tab.Count Loop
Dbms_Output.Put_Line( '----- Record #'||Val||' -----' );
Dbms_Output.Put_Line( 'Column Type: '||M_Rec_Tab(Val).col_type );
Dbms_Output.Put_Line( 'Max Length: '||M_Rec_Tab(Val).col_max_len );
...
Dbms_Output.Put_Line( 'Charset Form: '||M_Rec_Tab(Val).col_charsetform );
Dbms_Output.Put_Line( 'Nulls Allowed: '|| case when M_Rec_Tab(Val).col_null_ok then 'Y' else 'N' end );
end loop;
【讨论】:
这就是我需要的语法!谢谢 table_type_var(index).col_name以上是关于oracle中已经知道一个具体值,如何根据该值查询出含有该值的表名和列名?的主要内容,如果未能解决你的问题,请参考以下文章
从表 2 中选择一个值,该值依赖于表 1 中的另一个值 (Oracle SQL)