gpt4 book ai didi

sql - 将字符串转换为日期并在给定字符串无效时引发异常

转载 作者:搜寻专家 更新时间:2023-10-30 22:17:21 26 4
gpt4 key购买 nike

下面是我的代码。我想如果给定的日期不正确,它应该显示一条消息“提供的格式不正确”。

但我无法让它引发异常。
使用的异常是否不正确我可以使用 oracle 提供的哪个其他异常来处理这种情况?

Create or Replace Procedure A1SF_TESTDATE
(
pDateStr Varchar2
)As
tDate Date;
Begin
tdate := TO_DATE(pDateStr, 'yyyymmdd');
dbms_output.put_line(tdate);
Exception
When INVALID_NUMBER Then
dbms_output.put_line('The format provided is incorrect');

End;

最佳答案

TO_DATE 函数可以抛出许多异常。示例:

  • ORA-01843 - 月份值无效
  • ORA-01847 - 日期值无效
  • ORA-01830 - 日期格式图片在转换整个输入字符串之前结束
  • ...

您可以像下面的示例一样捕获它们(只有一个异常(exception)):

Create or Replace Procedure A1SF_TESTDATE
(
pDateStr Varchar2

-- you must do this for every oracle exception number which will you catch
bad_month EXCEPTION;
PRAGMA EXCEPTION_INIT (bad_month, -01843);
)As
tDate Date;
Begin
tdate := TO_DATE(pDateStr, 'yyyymmdd');
dbms_output.put_line(tdate);
Exception
When bad_month Then
dbms_output.put_line('The format provided is incorrect');

End;

但为此您必须定义 n 个编译指示!

我更喜欢的更简单的解决方案是:

Create or Replace Procedure A1SF_TESTDATE
(
pDateStr Varchar2
)As
tDate Date;
Begin
tdate := TO_DATE(pDateStr, 'yyyymmdd');
dbms_output.put_line(tdate);
Exception
-- every exception will be catched
When others Then
dbms_output.put_line('The format provided is incorrect! Because: ' || SQLERRM);

End;

SQLERRM 可能出现的消息是 ORA-01847: day of month must be between 1 and last day of month

关于sql - 将字符串转换为日期并在给定字符串无效时引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9836508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com