如何在oracle pl/sql查询中动态获取字段名?
我有一个表,其中包含名为“value1”、“value2”、“value3”的字段。 在sql代码中,我有一个类型为NUMBER的selectedValue变量,它在代码中的循环中动态获取其值。我还有一个简单的查询,如下所示:如何在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变量的值在
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。