欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

oracle 每日一题-function.RETURN语句 异常 exception 有大用

plsql中遇到异常后返回值

--oracle sql疑难解析

create or replace function isnum(v_in varchar2) return varchar is

val_err exception;

pragma exception_init(val_err,-6502);

scrub_num number;

begin

 scrub_num:=to_number(v_in);

return 'Y';

exception when val_err then 

return 'N';

end;


来自 https://blog.csdn.net/aoerqileng/article/details/46507049






原始出处:
http://www.plsqlchallenge.com/

作者:Steven Feuerstein 

运行环境:SQLPLUS, SERVEROUTPUT已打开

哪些选项创建了一个名为PLCH_IS_WONDERFUL的函数,使得下列代码块执行之后:

BEGIN
   DBMS_OUTPUT.put_line (plch_is_wonderful ('CHOCOLATE'));
   DBMS_OUTPUT.put_line (plch_is_wonderful ('BROKEN LEG'));
END;
/

你会在屏幕上按所示顺序看到如下的文本:

YES
NO

(A) 
CREATE OR REPLACE FUNCTION plch_is_wonderful (thing_in IN VARCHAR2)
   RETURN VARCHAR2
IS
BEGIN
   IF thing_in = 'CHOCOLATE'
   THEN
      RETURN 'YES';
   END IF;

   RAISE PROGRAM_ERROR;
EXCEPTION
   WHEN PROGRAM_ERROR
   THEN
      RETURN 'NO';
END plch_is_wonderful;
/

(B) 
CREATE OR REPLACE FUNCTION plch_is_wonderful (thing_in IN VARCHAR2)
   RETURN VARCHAR2
IS
BEGIN
   IF thing_in = 'CHOCOLATE'
   THEN
      RETURN 'YES';
   ELSE
      RETURN 'NO';
   END IF;
END plch_is_wonderful;
/

(C) 
CREATE OR REPLACE FUNCTION plch_is_wonderful (thing_in IN VARCHAR2)
   RETURN VARCHAR2
IS
BEGIN
   RETURN C ASE  thing_in WHEN 'CHOCOLATE' THEN 'YES' ELSE 'NO' END;
END plch_is_wonderful;
/

(D) 
CREATE OR REPLACE FUNCTION plch_is_wonderful (thing_in IN VARCHAR2)
   RETURN VARCHAR2
IS
   e_is_wonderful       EXCEPTION;
   e_is_not_wonderful   EXCEPTION;
BEGIN
   IF thing_in = 'CHOCOLATE'
   THEN
      RAISE e_is_wonderful;
   ELSE
      RAISE e_is_not_wonderful;
   END IF;
EXCEPTION
   WHEN e_is_wonderful
   THEN
      RETURN 'NO';
   WHEN e_is_not_wonderful
   THEN
      RETURN 'YES';
END plch_is_wonderful;

/


A: (不推荐)
第一个问题是我依赖于异常部分来处理我程序的一个逻辑分支。
第二个问题是我把这个方法和更常见也更好的条件逻辑混合使用。
极其令人迷惑!
B:
不依赖于异常,非常直接的IF。唯一不受推荐的理由是在这个情况下,CASE表达式更好。
C:(推荐)
没有将异常用于条件逻辑。简洁地使用CASE来避免冗余代码(此处指重复的RETURN)
D: 如同推特上常说的"OMG"(天哪)。声明了两个异常。在IF语句中,抛出了不同的异常。
然后在异常部分,处理每个异常并且返回所需的值。
啊哦,返回的值是错的!
你得仔细读这代码!
并且别再写这么复杂的代码。


来自 https://blog.csdn.net/zhq200902/article/details/55194245


普通分类: