加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

PL / SQL脚本中的本地函数

发布时间:2020-12-12 06:25:10 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试在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
我正在尝试在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;

但我得到一个没有任何特定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]|1d|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;

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

解决方法

如果这是你的整个脚本,你就错过了 the DECLARE keyword at the start of your anonymous block:
DECLARE
    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;
/

anonymous block completed
1

没有它,你会得到一系列错误

Error starting at line : 1 in command -
FUNCTION is_valid_date (p_val in VARCHAR2,p_format IN VARCHAR2 )
Error report -
Unknown Command

…我想到的是你提到的’通用错误’.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读