各位朋友好:
现有一个SQL Server存储过程,其中有一小段部分是如下的形式:
Begin
Insert into 目标表名(字段值)
If @@Error<>0 Return @@Error
End;
请问在将上述语句改为Oracle存储过程的时候,该如何处理?
在PL/SQL里编写存储过程时,错误提示是Return不能返回表达式.
再有一个问题:SQL Server里的@@Error是否对应于PL/SQL里的sqlcode? 就是返回错误号码的意思?
SQL Server的存储过程相对来说比较简单,因为其本身提供了很多的系统变量,比如说@@Error,@@Identity等,而PL/SQL里的Oracle存储过程没有这些系统变量.相当于重写.
在线急等将上述SQL Server存储过程片断转换为PL/SQL中Oracle存储过程对应的语句.
现有一个SQL Server存储过程,其中有一小段部分是如下的形式:
Begin
Insert into 目标表名(字段值)
If @@Error<>0 Return @@Error
End;
请问在将上述语句改为Oracle存储过程的时候,该如何处理?
在PL/SQL里编写存储过程时,错误提示是Return不能返回表达式.
再有一个问题:SQL Server里的@@Error是否对应于PL/SQL里的sqlcode? 就是返回错误号码的意思?
SQL Server的存储过程相对来说比较简单,因为其本身提供了很多的系统变量,比如说@@Error,@@Identity等,而PL/SQL里的Oracle存储过程没有这些系统变量.相当于重写.
在线急等将上述SQL Server存储过程片断转换为PL/SQL中Oracle存储过程对应的语句.
--@@Error,这是Sqlserver里面的,
--在Oracle中Error作为变量可直接使用。
--如下为oracle 异常捕获的通用形式:
...
Begin
...
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error ---' || SQLCODE || ': ' || SQLERRM);
ROLLBACK; --执行事务回滚。
END;
then 处理语句
http://blog.csdn.net/precipitant/archive/2007/10/31/1859403.aspx
If @@Error<>0 Then Return @@Error
会回滚事务吗?我感觉不会吧.只是停止程序的执行了.
我这里只是Oracle存储过程的一个片断,是由SQL Server转换过来的,如果用Rollback它会将该插入的记录,及出现问题的记录全部回滚,我想要的结果是,该插入的插入,不该插入的提示,好像原来的SQL Server存储过程的这条语句也是这么个意思.
beginsavepoint p
--......
commit;
exception
when others exception
rollback to p;
end;
貌似这样做也可以,但是好象比较繁琐,还有其他的处理方法吗? 另外,如果我就只想返回一个错误号码,比如说在2K里是@@Error,可以用Return @@Error,但在PL/SQL里Return后不可以有表达式,也就是说,不能用Return sqlcode这样的语句出现,(注:2K中的@@Error对应于PL/SQL里的sqlcode),请问该如何返回这个错误号码?
AS
TYPE Test_CURSOR IS REF CURSOR;
END Test;create or replace procedure p_test(RC out Test_CUR) as
begin
insert into test_a valueS ('111'); insert into test_a VALUES('1111111111111111111111111111');---插入值过大会报异常
EXCEPTION
WHEN OTHERS THEN
COMMIT;
DBMS_OUTPUT.put_line('AAAA');
open rc for
select '错误信息' from dual;
end;在异常处理代码段进行COMMIT处理 异常前面执行的语句都会进行数据 提交的 如果需要返回异常信息可以采用游标返回结果集的形式得到