首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试oracle过程参数中的有效日期

测试oracle过程参数中的有效日期
EN

Stack Overflow用户
提问于 2009-06-09 00:09:03
回答 2查看 14.2K关注 0票数 2

Oracle8在这里。

当向过程传递日期时,我可以传递一个'‘,而不抛出任何东西。

MYDATE := ''的测试结果不是真的。LENGTH < 1也是如此。DBMS_OUTPUT不显示通过该参数传入的任何内容。

尝试传递'01-30-2009' (instead of 30-JAN-2009)时会抛出无效的日期错误。

传递长度为零的字符串是有效的吗?

如何测试有效日期?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-09 00:14:55

在Oracle的更高版本中,空字符串被视为与NULL相同。这可能就是您遇到的问题。

您可以将参数设置为not null,然后它就会出错。(正如Jeffery Kemp在注释中指出的那样,您不能对参数使用NOT null )

就invalid date错误而言,如果字符串的格式为dd-mmm-yyyy,Oracle将隐式地将其转换为日期。否则,您将不得不使用适当的掩码通过to_date运行它。

我不熟悉Oracle8,所以我不确定什么是新的。希望这能有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2009-06-09 01:57:55

就我个人而言,我认为日期就是日期,字符串就是字符串。我希望有一种方法可以禁用隐式转换。但是,如果您控制调用该过程的程序,您可以尝试:

代码语言:javascript
复制
call my_proc(to_date('01-30-2009','MM-DD-YYYY'));

而不是:

代码语言:javascript
复制
call my_proc('01-30-2009');

否则,让您的过程接收一个字符串并检查过程内部的格式:

代码语言:javascript
复制
create procedure my_proc(p_date_str in varchar2) is
  v_dt date;

begin
  if length(v_dt) != 10 then
    raise_application_error(-20000,'Wrong date format',true);
  end if;
  v_dt := to_date(p_date_str,'MM-DD-YYYY');
  ... now use v_dt as a date ...
end;
/
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/967616

复制
相关文章

相似问题

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