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

时间:2014-06-03 11:58:23

标签: 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变量的值在SELECT语句中动态获取字段名称?

1 个答案:

答案 0 :(得分:2)

最简单的事情是:

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;

分享并享受。