ORA-01830来自.net存储过程调用的Oracle异常

时间:2011-12-28 16:26:34

标签: c# oracle datetime-format

我将日期传递给Oracle存储过程。我一直在努力获得上述异常。我猜的那个例外是由我不正确的dateTime格式引起的。存储过程需要日期的军事时间,格式为28-Dec-12 11:29:59。存储过程采用字符串并将它们转换为存储过程中的正确时间...以下是我如何设置正确的参数......

cmd.Parameters.Add(colName[i], DateTime.Parse(trueDateStr).ToString("dd-MMM-yy HH:mm:ss"));

给我消化不良的一个存储过程参数就是这个......

ACTIVE_DATEIn
to_date(ACTIVE_DATEin,'DD-MON-YY')

第二行是稍后在存储过程中的一行...第一行是传入的实际参数。有时候该参数可能为null ...我做的是检查它是否是null,然后我传入一个空字符串...那个空字符串会导致错误吗?我应该传递一些Null Date值或空日期值吗?你对此有何看法?

2 个答案:

答案 0 :(得分:3)

最有可能的问题是,您传递的是包含日期和时间的字符串,而Oracle只需要日期部分。这正是错误消息所说的(在成功解析日期部分之后,输入字符串中仍然存在字符但不是日期格式):

  

ORA-01830:日期格式图片在转换整个输入字符串之前结束

所以修复可能是:

cmd.Parameters.Add(colName[i], DateTime.Parse(trueDateStr).ToString("dd-MMM-yy"));

传入一个空字符串表示NULL是可以的。 Oracle将空字符串视为NULL,TO_DATE函数处理NULL值就好了。

答案 1 :(得分:0)

如果您使用错误的format_mask调用to_date,可能会出现此错误,请参阅here。请改用以下语句

to_date(ACTIVE_DATEin, 'DD-MON-YY HH24:MI:SS')