如何在oracle中的SELECT语句本身中选择自己的表名和列名?

时间:2018-07-04 09:35:23

标签: sql oracle

假设我有两个名为table1,table2的表,我将从该表中选择几个特定的​​数据。同时,我想在同一行中打印表名和列名。

表1

------------
ID  |  COL1 
------------ 
1       VAL1
2       VAL2

表2

------------
ID  |  COL2 
------------ 
1       VAL3
2       VAL4

假设我要得到如下结果

------------------------------------
TABLE_NAME | ID  | COL_NAME | VALUE
------------------------------------
table1        1     COL1      VAL1
table1        2     COL1      VAL2
table2        1     COL2      VAL3
table2        2     COL2      VAL4

我可以通过对表名和列名进行如下硬编码来简单地做到这一点

select 'table1' as TABLE_NAME,ID AS ID,'COL1' AS COL_NAME, COL1 AS VALUE FROM tabl1
union all
select 'table2' as TABLE_NAME,ID AS ID,'COL2' AS COL_NAME, COL2 AS VALUE FROM tabl2;

但是我想要比上面的方法更具动态性的方法。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

不确定如何获取列名,但不确定如何使用以下SQL获取表名:

select o.object_name,  a.* 
  from <table_name> a
 inner join user_objects o
   on o.object_id = dbms_rowid.rowid_object(a.rowid);

动态返回列名没有意义,因为您总是使用SQL静态定义列(*语法除外)。除非您想转向键值模式。