0

我有一个使用 DATE 作为输入的简单存储过程:

CREATE OR REPLACE PROCEDURE delete_time(myTime DATE) IS
BEGIN
DELETE FROM mytable WHERE time = myTime;
END;
/

这已使用函数导入添加到我的 EDMX 中,映射的类型是 SSDL 端的 Date 和 CSDL 端的 DateTime。

问题是当我使用 DateTime 从 .NET 运行该过程时,小时和分钟会在途中丢失:

DateTime dt = new DateTime(2013, 4, 3, 12, 15, 00);
var timeParam = new ObjectParameter("myTime", dt) : 
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("DeleteTime", timeParam);

这会运行存储过程,但会删除 TIME = 03-APR-2013 00:00:00 而不是 03-APR-2013 12:15:00 的行

Oracle 客户端中是否存在一些错误(我使用的是 11.2.0.3.20)?或者我在上面做错了什么?

我也尝试使用 TIMESTAMP 作为我的过程的输入类型,但是在调用函数时出现此错误: ORA-01830: date format picture ends before conversion整个输入字符串

有任何想法吗?

4

1 回答 1

0

我在尝试使用实体框架执行 Oracle 过程时遇到了这个问题。所以我确实喜欢这样传递一个 Date 参数:

var objects = _dbContext.Database.SqlQuery<MyObject>("BEGIN My_procedure(to_date('01/01/2016', 'dd/mm/yyyy  hh24:mi:ss')); END;").ToList();
于 2016-06-08T20:49:03.700 回答