如何在oracle pl/sql查询中动态获取字段名?

如何在oracle pl/sql查询中动态获取字段名?,sql,oracle,plsql,oracle11g,Sql,Oracle,Plsql,Oracle11g,我有一个表,其中包含名为“value1”、“value2”、“value3”的字段。 在sql代码中,我有一个类型为NUMBER的selectedValue变量,它在代码中的循环中动态获取其值。我还有一个简单的查询,如下所示: SELECT value1 FROM val_table; 因此,我想在selectedValue=1时选择value1,在selectedValue=2时选择value2,在selectedValue=3时选择value3 如何根据selectedValue变量的值在

我有一个表,其中包含名为“value1”、“value2”、“value3”的字段。 在sql代码中,我有一个类型为NUMBER的selectedValue变量,它在代码中的循环中动态获取其值。我还有一个简单的查询,如下所示:

SELECT value1 FROM val_table;
因此,我想在selectedValue=1时选择value1,在selectedValue=2时选择value2,在selectedValue=3时选择value3


如何根据selectedValue变量的值在SELECT语句中动态获取字段名

最简单的方法是:

DECLARE
  aNumber  NUMBER;
BEGIN
  CASE selectedValue
    WHEN 1 THEN SELECT VALUE1 INTO aNumber FROM VAL_TABLE;
    WHEN 2 THEN SELECT VALUE2 INTO aNumber FROM VAL_TABLE;
    WHEN 3 THEN SELECT VALUE3 INTO aNumber FROM VAL_TABLE;
  END CASE;

  DBMS_OUTPUT.PUT_LINE('aNumber=' || aNumber);
END;
如果要使其更复杂,可以执行以下操作:

DECLARE
  aCursor  SYS_REFCURSOR;
  strQuery VARCHAR2(1000);
  strField VARCHAR2(20);
  aNumber  NUMBER;
BEGIN
  CASE selectedValue
    WHEN 1 THEN strField := 'VALUE1';
    WHEN 2 THEN strField := 'VALUE2';
    WHEN 3 THEN strField := 'VALUE3';
  END CASE;

  strQuery := 'SELECT ' || strField || ' FROM VAL_TABLE';

  OPEN aCursor FOR strQuery;

  LOOP
    FETCH aCursor INTO aNumber;
    EXIT WHEN aCursor%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE('aNumber=' || aNumber);
  END LOOP;

  CLOSE aCursor;
END;

共享和欣赏。

请编辑您的问题,并显示示例数据和您所参考的代码。此外,您还可以在。。。然后是里面的陈述CASE@denied-就个人而言,我更喜欢
案例
而不是
解码
。YMMV。