我想运行以下SQL select:
SELECT ID,
NUMERATOR,
(SELECT m.COLUMNNAME FROM m.TABLENAME p WHERE p.numerator = m.numerator
) VALUE,
TABLENAME,
COLUMNNAME
FROM MainTable m;
在当前状态下它根本不运行,当然,因为oracle根本不识别m.TABLENAME。有可能以某种方式做这种事吗?对于COLUMNNAME
也是如此 - 即使我暂时将表替换为我所获得的某个“真实”表,在当前语法中它只输出m.COLUMNNAME
内的值而不是p内的值,在名称为m.COLUMNNAME
的列中
希望我能清楚地了解它。
我想我的另一种方法是创建一个迭代第一个查询结果的过程,并为每个查询执行另一个选择以填充VALUE
列。这是我能做的最好的事情吗?
答案 0 :(得分:2)
您将不得不使用dynamic SQL即PL / SQL或在应用程序中动态构建SQL语句。如您所知,Oracle不支持此行为。
答案 1 :(得分:1)
使用cletus解决方案可能更容易。
但这并非完全不可能,你可以使用dbms_xmlgen.getxml(' ')
,使用dbms_xmlgen.getxml(' ')
可以在sql语句中创建动态sql语句。
不要期待良好的表现!!
答案 2 :(得分:1)
如果只有少数可能的表名/列名,您可以执行类似
的操作SELECT ID,
NUMERATOR,
case
when m.table_name = 'A' and m.column_name = 'B' then
(SELECT b FROM a WHERE a.numerator = m.numerator)
when ....
end VALUE,
TABLENAME,
COLUMNNAME
FROM MainTable m;
任何超过3或4的东西都会让这个非常丑陋但是