我有一个包含名为'value1','value2','value3'的字段的表。 在sql代码中,我有一个NUMBER类型的变量selectedValue,它在代码中的循环内动态获取其值。我也有这样一个简单的查询:
SELECT value1 FROM val_table;
所以我想在selectedValue = 1时选择value1,在selectedValue = 2时选择value2,在selectedValue = 3时选择value3。
如何根据selectedValue变量的值在SELECT语句中动态获取字段名称?
答案 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;
分享并享受。