首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在dbtype.date的输出参数中返回null

在dbtype.date的输出参数中返回null
EN

Stack Overflow用户
提问于 2019-05-20 17:42:16
回答 2查看 113关注 0票数 0

我有一个存储过程,它将日期或null返回到命令参数中。但是,我在处理null返回时遇到了困难。

该过程如下所示:

代码语言:javascript
复制
PROCEDURE GetDate(inParam IN VARCHAR2, outDate OUT DATE) AS
    BEGIN
        SELECT MAX(DateVal) INTO outDate
        FROM Table1
        WHERE Col1 = inParam;
    EXCEPTION 
        WHEN no_data_found THEN
        outDate:= NULL;
END GetDate;

我的VB.NET代码看起来像这样:

代码语言:javascript
复制
Dim returnDate As Date

Connection.Open()
Command.CommandType = CommandType.StoredProcedure
Command.CommandText = "GEN_PACKAGE.GetDate"
Command.Parameters.Add("inParam", inParam).Direction = ParameterDirection.Input
Command.Parameters.Add("outDate", OracleDbType.Date).Direction = ParameterDirection.Output
Command.ExecuteNonQuery()
returnDate = CDate(Command.Parameters("outDate").Value)

然而,使用它我得到了returnDate = CDate(Command.Parameters("outDate").Value)上的异常Conversion from type 'OracleDate' to type 'Date' is not valid.

如果我将OracleDbType.Date更改为DbType.Date (这是我从另一个答案中找到的解决方案),我会得到Command.Parameters.Add("D0131Date", DbType.Date).Direction = ParameterDirection.Output上的Value does not fall within the expected range

当我的返回日期可能为空也可能不为空时,我如何为给定的输入返回日期?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-21 03:12:06

抱歉,无法测试。没有Oracle

代码语言:javascript
复制
    Dim returnDate = If(Command.Parameters("outDate").Value = DBNull.Value, Nothing, Command.Parameters("outDate").Value)
    If returnDate Is Nothing Then
        'Handle a null return
    Else
        Dim MyDate As Date = DirectCast(returnDate, Date)
    End If
票数 1
EN

Stack Overflow用户

发布于 2019-05-20 18:00:09

您可以将过程的异常块转换为

代码语言:javascript
复制
EXCEPTION 
        WHEN no_data_found THEN
        outDate:= date'1900-01-01';

返回一个非常旧的日期,并通过一些ifcase语句将这个特定的值作为NULL值在您的应用程序中过滤出来,并使用outDate的值进行排序。

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

https://stackoverflow.com/questions/56218227

复制
相关文章

相似问题

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