语句:
存储过程中的语句,使用了游标
....
select name into v_name from test where id=v_record.id and addr=v_record.addr;
....
创建成功
但是执行时报错,原因是test表没有相应的记录.
尝试办法:
select name into v_name from test where id=v_record.id and addr=v_record.addr
and exists (select 1 from test where id=v_record.id and addr=v_record.addr);
报同样的错,请问用什么办法可以让存储过程执行成功,test 没有满足条件值时,可以设空或常量
存储过程中的语句,使用了游标
....
select name into v_name from test where id=v_record.id and addr=v_record.addr;
....
创建成功
但是执行时报错,原因是test表没有相应的记录.
尝试办法:
select name into v_name from test where id=v_record.id and addr=v_record.addr
and exists (select 1 from test where id=v_record.id and addr=v_record.addr);
报同样的错,请问用什么办法可以让存储过程执行成功,test 没有满足条件值时,可以设空或常量
解决方案 »
- 一个语句问题
- insert into T_A(id, code, name) select T_B.code, T_B.name, T_C.id
- oracle远程登陆的问题?
- 过程与匿名块的区别
- 关于oracle enterprise manager和 grid control的问题
- oracle sequences的问题.
- 使用PL/SQL导入数据库的方法!!!!!!!
- 请问,SQL plus默认的登陆方式是什么啊?
- 请教有关于Oracle表的修改
- case when 判断添加一个字段和新建一个关系表外连接添加一个字段哪个效率高
- 复杂的查询分页效率问题,望高手解答!
- 请问如何在sqlplus中执行一个字符串,字符串的内容是一个select语句。谢谢!
“但是执行时报错,原因是test表没有相应的记录”是什么意思?
select into 的nodatafound错误吧?
一头雾水
cursor c1 is
select id,addr from test0;
不是同一个表,在另外一个表找匹配c1的值.
问提就是:另一个表test没有匹配值时报错
选择不出相应的name,select nvl(max(name),'空') into v_name 可以解决这个问题。你试试看就明白了。
----- ----------
1 11
2 12SQL> select nvl(max(yw),'a') from a where xm ='1';NVL(MAX(YW),'A')
----------------
11SQL> select nvl(max(yw),'a') from a where xm ='3';NVL(MAX(YW),'A')
----------------
aSQL>
这种情况好像SQLcode = 100
你看看是不是因为这个原因?
begin
select name into v_name from test where id=v_record.id and addr=v_record.addr;
exception
when others then
dbms_output.put_line ('error');
end;
......
select name into v_name from test where id=v_record.id and addr=v_record.addr;
.....
exception
when no_data_found then
v_name := '空';
.....
for c in (select name from test where id=v_record.id and addr=v_record.addr)
loop
v_name:=c.name;
exit;
end loop;
对于oracle来说,procedure/trigger中的异常处理将非常关键,否则经常会编译通过了,使用的时候却总是报错.