to ORARichard(没钱的日子......) 我在8i 里面不用goto的 直接在then之后写代码就行了
那就要用到嵌套的exception吧 要不然如果在exception中的语句又出现了异常的话。
也就是说要定义一个exception变量
呵呵 他是碰到错误不要停下来 THEN 后面可以做些无聊的事情 不会有EXCEPTION就可以了
select a into v_a from tab ... 我是想如果没有数据,自动取变量的初始值就是了。还非要我去先count(*)一把,累不累呀。用exception的话,怎么用呢?没有更简单的,比如用语句设置某个环境变量,它就继续执行????????
select a into v_a from tab可能返回多条记录,也会出错. 那为什么不用油标?
那就用select nvl(a,0) into v_a from tab ... 或者 select nvl(a,v_a) into v_a from tab ...
就这么用啊: BEGIN select a into v_a from tab; EXCEPTION WHEN NO_DATA_FOUND THEN .... END别的方法就不知道了,如果什么错误都不管:BEGIN select a into v_a from tab; EXCEPTION WHEN OTHERS THEN .... END
select nvl(a,0) into v_a from tab ... 或者 select nvl(a,v_a) into v_a from tab ...这个也可以,就是你不知道a是不是null,如果选出来是多行的话,还是一样出错的(TOO_MANY_ROWS)。
真怪,楼主是想无论是否出错都继续执行吧,怎么大家这么复杂,如下就行了 BEGIN select a into v_a from tab; EXCEPTION WHEN OTHERS THEN NULL; END; --就是把异常空处理套在语句外就行了.
看来你对oracle的异常不很了解噢,楼上各位的讲解已经很清楚了,不过要提醒你一点,exception用的不好会破坏数据的一致性. 例如: begin select .. into .. from ..; insert into table1... exception when no_data_found then null; end;insert into table2...如上例,如果你的第二个insert与select 的结果有关,则虽然select执行没有成功,但是insert into table2却执行了,这样有时会导致数据的一致性被破坏,所以使用exception时要注意.
select A into B ....... A 是对象才能有into B这个操作,Max,Min,Count等都会建一个空对象 这是从数据安全的角度考虑,应该不是'ORACLE弱智' 吧( :
要不然如果在exception中的语句又出现了异常的话。
我是想如果没有数据,自动取变量的初始值就是了。还非要我去先count(*)一把,累不累呀。用exception的话,怎么用呢?没有更简单的,比如用语句设置某个环境变量,它就继续执行????????
那为什么不用油标?
或者
select nvl(a,v_a) into v_a from tab ...
BEGIN
select a into v_a from tab;
EXCEPTION
WHEN NO_DATA_FOUND THEN
....
END别的方法就不知道了,如果什么错误都不管:BEGIN
select a into v_a from tab;
EXCEPTION
WHEN OTHERS THEN
....
END
或者
select nvl(a,v_a) into v_a from tab ...这个也可以,就是你不知道a是不是null,如果选出来是多行的话,还是一样出错的(TOO_MANY_ROWS)。
BEGIN
select a into v_a from tab;
EXCEPTION WHEN OTHERS THEN
NULL;
END;
--就是把异常空处理套在语句外就行了.
例如:
begin
select .. into .. from ..;
insert into table1...
exception when no_data_found then
null;
end;insert into table2...如上例,如果你的第二个insert与select 的结果有关,则虽然select执行没有成功,但是insert into table2却执行了,这样有时会导致数据的一致性被破坏,所以使用exception时要注意.
A 是对象才能有into B这个操作,Max,Min,Count等都会建一个空对象
这是从数据安全的角度考虑,应该不是'ORACLE弱智' 吧( :