假设我有两个名为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;
但是我想要比上面的方法更具动态性的方法。有没有办法做到这一点?
答案 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静态定义列(*语法除外)。除非您想转向键值模式。