如何在 oracle pl/sql 查询中动态获取字段名称?
Posted
技术标签:
【中文标题】如何在 oracle pl/sql 查询中动态获取字段名称?【英文标题】:How to get field name dynamically in oracle pl/sql query? 【发布时间】:2014-06-03 11:58:23 【问题描述】:我有一个表,其中包含名为“value1”、“value2”、“value3”的字段。 在 sql 代码中,我有一个 NUMBER 类型的变量 selectedValue,它在代码的循环内动态获取其值。我也有一个这样的简单查询:
SELECT value1 FROM val_table;
所以我想在 selectedValue = 1 时选择 value1,在 selectedValue = 2 时选择 value2,在 selectedValue = 3 时选择 value3。
如何根据 selectedValue 变量的值在 SELECT 语句中动态获取字段名称?
【问题讨论】:
请编辑您的问题并显示示例数据和您所指的代码。 【参考方案1】:最简单的做法是:
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;
分享和享受。
【讨论】:
您也可以使用 DECODE() 函数代替 CASE 中的多个 WHEN ... THEN 语句 @denied - 我个人更喜欢CASE
而不是DECODE
。 YMMV。以上是关于如何在 oracle pl/sql 查询中动态获取字段名称?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Oracle (PL/SQL) 动态 sql 将数据查询到 %rowtype 变量中
如何在 Oracle PL/SQL 中动态地从行参数中获取命名列?
如何在 sqlplus 中调试 Oracle 动态 sql?