oracle 函数异常,oracle 异常+存储过程+函数

--第一种异常

declare

v_Num number;

begin

v_Num := 10 / 0;

exception

when zero_divide then --捕获特定异常

dbms_output.put_line('除数不能为零');

when others then

dbms_output.put_line('出错了');--捕获所有的异常

end;

--其应用:错误跟踪(缺陷跟踪)

declare

v_trace varchar2(200);

v_num number;

begin

v_trace := '正在做第一个业务逻辑,错误编号:1001';

v_num := 1234 - 435;

v_trace := '正在做第二个业务逻辑,错误编号:1002';

v_num := 56345 - 435;

v_trace := '正在做第三个业务逻辑,错误编号:1003';

v_num := 322 - 6786;

when others then

dbms_output.put_line('出错了');--用户自行决定是否需要提示

-- insert into 日志表(v_trace......);

end;

--第二种异常:事先定义异常编号,后捕捉(也属于自定义异常)

declare

v_UserExcept exception;

pragma exception_init(v_UserExcept,-1476);

v_Num number;

begin

v_Num := 10 / 0;

exception

when v_UserExcept then

dbms_output.put_line('除数不能为零');

end;

--第三种异常:自定义异常

declare

v_num number;

v_Except exception;

begin

v_num := 20;

if v_num > 10 then

raise v_Except; -- 主动出发异常

end if;

exception

when v_Except then

dbms_output.put_line('出错了');

end;

--其应用:可以用作预警

declare

v_num number;

e_except exception;

begin

v_num:=15;

if v_num>10 and v_num<20 then

raise e_except;

end if;

exception

when e_except then

dbms_output.put_line(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')||' '||'某设备当前的指标为:'||to_char(v_num));

when others then

dbms_output.put_line(sqlcode||'-'||sqlerrm);

end;

--存储过程

declare

v_num number;

begin

v_num := 123;

end;

create or replace procedure GetName

is

v_num number;

begin

v_num := 123;

end;

--调用方法

--方法一:命令

SQL> execute GetName;

PL/SQL procedure successfully completed

SQL>

--方法二:程序

begin

GetName;

end;

create or replace procedure GetName1(i_in_n_EmpNO in number)

is

v_Name  varchar2(20);

begin

select ename into v_Name from emp where empno=i_in_n_EmpNO;

dbms_output.put_line(v_Name);

end;

--第一种调用方法

SQL> set serveroutput on

SQL> execute getname1(7369);

SMITH

PL/SQL procedure successfully completed

SQL>

--第二种调用方法

begin

GetName1(7369);

end;

--out参数

create or replace procedure GetName2(i_in_n_EmpNO in number,i_out_c_Name out varchar2)

is

begin

select ename into i_out_c_Name from emp where empno=i_in_n_EmpNO;

end;

--第一种调用方法

SQL> variable v_name varchar2(20);

SQL> execute getname2(7369,:v_name);

PL/SQL procedure successfully completed

v_name

---------

SMITH

SQL> select :v_name from dual;

:V_NAME

--------------------------------------------------------------------------------

SMITH

v_name

---------

SMITH

SQL>

--第二种调用方法

declare

v_name varchar2(20);

begin

GetName2(7369,v_name);

dbms_output.put_line(v_name);

end;

--in out参数

create or replace procedure GetName3(i_inout_c_Name in out varchar2)

is

begin

select ename into i_inout_c_Name from emp where empno=to_number(i_inout_c_Name);

end;

--调用方法

declare

v_name varchar2(20);

begin

v_name:= '7369';

GetName3(v_name);

dbms_output.put_line(v_name);

end;

--函数

declare

v_num number;

begin

v_num := 123;

end;

create or replace function getFuncName

return number

is

v_num number;

begin

v_num := 123;

return v_num;

end;

--第一种调用方法

SQL> select getFuncName from dual;

GETFUNCNAME

-----------

123

SQL>

--第二种调用方法

declare

v_num number;

begin

--select getFuncName into v_num from dual;

v_num := getFuncName();

dbms_output.put_line(v_num);

end;

create or replace function getFuncName1(i_in_n_EmpNO number)

return varchar2

is

v_name varchar2(20);

begin

select ename into v_Name from emp where empno=i_in_n_EmpNO;

return v_name;

end;

--第一种调用方法

SQL> select getFuncName1(7369) from dual;

GETFUNCNAME1(7369)

--------------------------------------------------------------------------------

SMITH

SQL>

--第二种调用方法

declare

v_name varchar2(20);

begin

v_name := getFuncName1(7369);

dbms_output.put_line(v_name);

end;

create or replace function getFuncName3(i_in_n_EmpNO in number,i_out_c_Name out varchar2)

return number

is

begin

select ename into i_out_c_Name from emp where empno=i_in_n_EmpNO;

return 1;

end;

--调用方法

declare

v_name varchar2(20);

v_num number;

begin

v_num := getFuncName3(7369,v_name);

dbms_output.put_line(v_name ||'  返回值:'|| to_char(v_num));

end;

create or replace function getFuncName4(i_inout_c_Name in out varchar2)

return number

is

begin

select ename into i_inout_c_Name from emp where empno=to_number(i_inout_c_Name);

return 1;

end;

--调用方法 declare   v_name varchar2(20);   v_num number; begin    v_name:= '7369';    v_num := getFuncName4(v_name);    dbms_output.put_line(v_name ||'  返回值:'|| to_char(v_num)); end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值