如何使用另一个参数的查询结果? ORACLE

时间:2017-05-30 22:11:08

标签: sql oracle oracle10g

我有一个返回此

的查询
SELECT COLNAME FROM TABLE_1 WHERE CATALOG_ID = 40;

    COLNAME
    ----------------
    CONVERTED_VALUE
    CONVERTED_VALUE_01
    CONVERTED_VALUE_02
    CONVERTED_VALUE_03
    VALUE_DESCRIPTION

我需要将此结果转换为类似下一个的查询:

SELECT CONVERTED_VALUE, CONVERTED_VALUE_01, CONVERTED_VALUE_02, 
CONVERTED_VALUE_03 , VALUE_DESCRIPTION 
FROM TABLE2 WHERE CATALOG_ID = 40;

可以在单个查询中执行此操作,例如我不知道

SELECT( SELECT COLNAME FROM TABLE_1 WHERE CATALOG_ID = 40 ) 
FROM TABLE_2 WHERE CATALOG_ID = 40;

很明显,这不起作用但是想法:)

我真的不知道如何实现这个目标。有什么建议吗?我不是专家  使用数据库:(

我正在使用Oracle 10,

这个想法基本上是将第一个查询的结果转换为第二个查询的参数。

3 个答案:

答案 0 :(得分:0)

我认为这是您正在寻找的,只要我对您的问题的理解是正确的:

SELECT
  t.CONVERTED_VALUE,
  t.CONVERTED_VALUE_01,
  t.CONVERTED_VALUE_02, 
  t.CONVERTED_VALUE_03,
  t.VALUE_DESCRIPTION
FROM
  (SELECT COLNAME FROM TABLE_1 WHERE CATALOG_ID = 40) t,
  TABLE_2
WHERE TABLE_2.CATALOG_ID = 40;

如果我不理解您的要求,请告诉我。

答案 1 :(得分:0)

这就是我想到的。但是从匿名块中激活select语句看起来不太好。

DECLARE
    V_COL VARCHAR2(100):='';
    s_ql VARCHAR2(200):='';
BEGIN
    SELECT LISTAGG(COLNAME,',') WITHIN GROUP(ORDER BY COLNAME) AS COL INTO V_COL FROM TABLE_1 WHERE CATALOG_ID = 40 group by CATALOG_ID;
    s_ql:='SELECT '||V_COL||' FROM TABLE2 WHERE CATALOG_ID = 40';
    EXECUTE IMMEDIATE (s_ql);
END

您可以使用某个变量或集合来捕获结果并使用 DBMS_OUTPUT 显示它。

答案 2 :(得分:0)

select语句的返回格式与我们需要提供的列名格式不匹配,所以我猜不可能:(