假设有个A表被锁住了。
我有语句是这样的:
DECLARE
c INT;
BEGIN
SELECT c_1 INTO c FROM A FOR UPDATE WAIT 10;
IF SQLCODE <> 0 THEN
dbms_output.put_line('超时啦!');
END IF;
END;我是想判断到是否超时,但是实际执行的时候是直接报错的,不会输出“超时”文本。
请问这个如何实现?
其实就是想处理并发时的一个返回。
我有语句是这样的:
DECLARE
c INT;
BEGIN
SELECT c_1 INTO c FROM A FOR UPDATE WAIT 10;
IF SQLCODE <> 0 THEN
dbms_output.put_line('超时啦!');
END IF;
END;我是想判断到是否超时,但是实际执行的时候是直接报错的,不会输出“超时”文本。
请问这个如何实现?
其实就是想处理并发时的一个返回。
c INT;
BEGIN
SELECT c_1 INTO c FROM A FOR UPDATE WAIT 1;
EXCEPTION
WHEN others THEN
dbms_output.put_line(SUBSTR(SQLERRM, 1, 120));
dbms_output.put_line(SQLCODE);
dbms_output.put_line('超时啦!');
--END IF;
END;
这里我顺便再问一个问题,在sql server中,如果一个事务内要对两个表进行增删改的话,可以在每条sql语句后通过@@error来判断,但是在oracle中比如:
insert into t1 values(...);
insert into t2 values(...);exception
when others then
...假设发生异常的话,我如何能得知是在插入t1还是插入t2时发生的异常???
c INT;
BEGIN
SELECT comm INTO c FROM emp WHERE comm='300.00' FOR UPDATE WAIT 10;
IF SQLCODE <> 1 THEN
dbms_output.put_line(SQLCODE);
dbms_output.put_line('超时啦!');
END IF;
END;
结果在返回值那块的,可能是c_1你选择出了多个的值,你把这多个的值赋值给了c ,所以报错了。上面的是我修改后的语句,可以执行出结果的
在sql server中,如果一个事务内要对两个表进行增删改的话,可以在每条sql语句后通过@@error来判断,但是在oracle中比如:
insert into t1 values(...);
insert into t2 values(...);exception
when others then
...假设发生异常的话,我如何能得知是在插入t1还是插入t2时发生的异常???
begin
insert into t1 values(...);
exception
when others then
...
end;begin
insert into t2 values(...);
exception
when others then
...
end;