首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PL/SQL脚本内的本地函数

PL/SQL脚本内的本地函数
EN

Stack Overflow用户
提问于 2014-02-18 22:29:59
回答 1查看 27.1K关注 0票数 15

我正在尝试在Oracle10SQL Developer中执行以下代码:

代码语言:javascript
运行
复制
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论坛上找到了一个使用oracle regexp而不是函数的解决方案。我的脚本是:

代码语言:javascript
运行
复制
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;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-18 22:38:48

如果这就是您的整个脚本,那么您就错过了the DECLARE keyword at the start of your anonymous block

代码语言:javascript
运行
复制
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

否则,您将收到一系列错误,从

代码语言:javascript
运行
复制
Error starting at line : 1 in command -
FUNCTION is_valid_date (p_val in VARCHAR2, p_format IN VARCHAR2 )
Error report -
Unknown Command

..。我想这就是你提到的“通用错误”。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21856832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档