【发布时间】:2015-08-13 13:30:33
【问题描述】:
我在将 for 循环变量传递给显式声明的游标时遇到了问题。这是 PL/SQL 代码:
DECLARE
count_total number := 0;
i number :=0;
ch varchar(10) := 'abc';
ch2 varchar(10) := 'xyz';
CURSOR cursor_sim_b IS **--identifying if value is garbage--**
select a1,a2, a3, a4, a5, a6,
trim(translate(a1,'0123456789',' ')),
trim(translate(a2,'0123456789',' ')),
trim(translate(a3,'0123456789',' ')),
trim(translate(a4,'0123456789',' ')),
trim(translate(a5,'0123456789',' ')),
trim(translate(a6,'0123456789',' '))
from temp_clean;
sim_b_rec cursor_sim_b%rowtype;
BEGIN
dbms_output.put_line('OUTSIDE the CURSOR ');
FOR sim_b_rec IN cursor_sim_b
LOOP
dbms_output.put_line('OUTSIDE the FOR LOOP ');
FOR i IN 1..6
LOOP
ch := 'a' ||i;
if sim_b_rec.ch is not null **--ERROR--**
then
BEGIN
execute immediate 'update temp_clean
set sim_b_rec.%ch = NULL';
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
DBMS_OUTPUT.PUT_LINE('a'||i||'<' || ch || '>');
end if;
END LOOP;
END LOOP;
END;
/
收到以下错误: PLS-00302:必须声明组件“CH”
有没有办法将变量传递给光标?
【问题讨论】:
-
sim_b_rec 记录中没有 'ch' 元素。
-
@Gary_W 你能详细说明一下吗?
-
这一行:如果 sim_b_rec.ch 不是 null 。游标定义中没有“ch”。
-
@Gary_W 这是我的问题。我已经声明了一个变量“ch”,我想将它传递给游标,因为对于每个循环,它将存储一个不同的值,即 a1、a2、a3 等等。所以游标可以将值更新为 sim_b_rec.a1, sim_b_rec.a2 这可能吗?
标签: sql plsql oracle-sqldeveloper