是否可以在以下FOR循环后执行c_emp%notfound
或者我是否必须先打开光标?
declare
cursor c_emp is select * from employee;
begin
for c_rec in c_emp
loop
dbms_output.put_line(r_emp.first_Name);
end loop;
end;
/
我想在FOR循环之后执行单个UPDATE语句的语句,但前提是FOR循环确实处理了游标上的任何行。我知道我可以设置一面旗帜,但有更清洁的方式吗?
答案 0 :(得分:4)
“在以下FOR之后可以执行c_emp%notfound 环“
不,那将会招致ORA-01001: invalid cursor
。光标属性仅在光标打开时具有范围,在此语法中,范围在FOR
和END LOOP
之间。
这是PL / SQL的丑陋方面,但我担心你会被计算在内。
答案 1 :(得分:2)
为什么不呢:
declare
cursor c_emp is select * from employee;
begin
for c_rec in c_emp
loop
dbms_output.put_line(r_emp.first_Name);
end loop;
UPDATE some_table
SET some_values
WHERE some_conditions
AND EXISTS (SELECT * FROM employee WHERE r.id IS NOT NULL)
end;
/
我假设您的员工表中有一个名为ID的主键,您可以根据需要进行调整。