Oracle8在这里。
当向过程传递日期时,我可以传递一个'‘,而不抛出任何东西。
MYDATE := ''的测试结果不是真的。LENGTH < 1也是如此。DBMS_OUTPUT不显示通过该参数传入的任何内容。
尝试传递'01-30-2009' (instead of 30-JAN-2009)时会抛出无效的日期错误。
传递长度为零的字符串是有效的吗?
如何测试有效日期?
发布于 2009-06-09 00:14:55
在Oracle的更高版本中,空字符串被视为与NULL相同。这可能就是您遇到的问题。
您可以将参数设置为not null,然后它就会出错。(正如Jeffery Kemp在注释中指出的那样,您不能对参数使用NOT null )
就invalid date错误而言,如果字符串的格式为dd-mmm-yyyy,Oracle将隐式地将其转换为日期。否则,您将不得不使用适当的掩码通过to_date运行它。
我不熟悉Oracle8,所以我不确定什么是新的。希望这能有所帮助。
发布于 2009-06-09 01:57:55
就我个人而言,我认为日期就是日期,字符串就是字符串。我希望有一种方法可以禁用隐式转换。但是,如果您控制调用该过程的程序,您可以尝试:
call my_proc(to_date('01-30-2009','MM-DD-YYYY'));而不是:
call my_proc('01-30-2009');否则,让您的过程接收一个字符串并检查过程内部的格式:
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;
/https://stackoverflow.com/questions/967616
复制相似问题