选择专栏中,我已经声明了以下光标和变量:的Oracle SQL动态查询到光标
l_level VARCHAR2(100);
l_level_value VARCHAR2(100);
l_select_clause CLOB;
CURSOR l_data IS
SELECT LEVEL1, LEVEL2, LEVEL3
FROM LEVELS;
然后我遍历光标:
FOR c1line IN l_data
LOOP
CASE WHEN c1line.LEVEL1 IS NULL THEN l_level := 'c1line.LEVEL2'
WHEN c1line.LEVEL2 IS NULL THEN l_level := 'c1line.LEVEL3'
WHEN c1line.LEVEL3 IS NULL THEN l_level := 'c1line.LEVEL4'
ELSE l_level := NULL
END CASE;
END LOOP;
l_select_clause := 'SELECT ' || l_level || ' INTO l_level_value FROM dual;';
EXECUTE IMMEDIATE l_select_clause;
然后,我有一些其他的语句执行取决于什么被选入变量l_level_value
我的问题是,当执行我的程序时,我得到以下错误:
ORA-00904: “C1LINE” “LEVEL2”:无效的标识符 ORA-06512:在 “my_procedure的”,线路110 ORA-06512:在2号线
有谁知道我做错了? 谢谢
它失败的是什么? 'C1LINE'声明为'l_data%rowtype'吗?我不认为你的CASE WHEN是正确的 - 它会将l_level设置为NULL,只要c1lin1.level1是** not ** NULL。我认为它应该是:'l_level:= coalesce(c1line.level1,c1line.level2,c1line.level3,c1line.level4)'。 – Joe