小编use*_*809的帖子

PL/SQL脚本中的本地函数

我正在尝试在Oracle 10 SQL Developer中执行此代码:

FUNCTION is_valid_date (p_val in VARCHAR2, p_format IN VARCHAR2 ) 
RETURN numeric IS
    l_date VARCHAR2(100);
BEGIN
    l_date := TO_date( p_val, p_format );
    RETURN 1;
EXCEPTION
    WHEN OTHERS THEN
        RETURN 0;
END is_valid_date;


BEGIN
DBMS_OUTPUT.PUT_LINE(is_valid_date('20120101', 'YYYYMMDD' )); 
END;
Run Code Online (Sandbox Code Playgroud)

但我得到一个没有任何特定Oracle代码的通用错误,就好像它是一个语法问题.

我需要检查日期是否有效,并且因为没有Oracle内置函数,我已经在我的脚本中定义了它(我不希望它是全局的或存储在某个地方).

编辑:

我在使用oracle regexp而不是函数的oracle论坛上找到了解决方案.我的脚本是:

BEGIN

select * from mytable where not REGEXP_LIKE(mydatefield, '(((0[1-9]|[12]\d|3[01])\.(0[13578]|1[02])\.((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\.(0[13456789]|1[012])\.((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\.02\.((19|[2-9]\d)\d{2}))|(29\.02\.((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))')

END;
Run Code Online (Sandbox Code Playgroud)

其中mydatefield的格式为DD.MM.YYYY

sql oracle function local

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

function ×1

local ×1

oracle ×1

sql ×1