to myhuaer;
其实通过traslate函数转换,肯定是可以的,你的这个函数不过是将返回值变更为了布尔型。
val := TO_NUMBER (NVL (parmin, 'a'));
7 RETURN 1;
...
这里改为布尔型返回值也是可以的,还要更简明一些。
不过boolean的问题在于,不能够在函数中直接调用处理,还需要经过一次判断。
SQL> CREATE OR REPLACE FUNCTION is_number2 (parmin VARCHAR2)
2 RETURN boolean
3 IS
4 val NUMBER;
5 BEGIN
6 val := TO_NUMBER (NVL (parmin, 'a'));
7 RETURN True;
8 EXCEPTION
9 WHEN OTHERS
10 THEN
11 RETURN False;
12 END;
13 /
Function created.
SQL> select is_number2('aa') from dual;
select is_number2('aa') from dual
*
ERROR at line 1:
ORA-06552: PL/SQL: Statement ignored
ORA-06553: PLS-382: expression is of wrong type
SQL> set serveroutput on
SQL> begin
2 if is_number2('11') then
3 dbms_output.put_line('number');
4 end if;
5 end;
6 /
number
PL/SQL procedure successfully completed.
SQL>