这件事要毁了我……
我有一个Oracle过程,如下所示:(这是我的最新版本)
create or replace PROCEDURE MANAGEMENTFEES
(
STARTDATE IN VARCHAR2
, ENDDATE IN VARCHAR2
, cursor_ OUT sys_refcursor
) AS
BEGIN
OPEN cursor_ FOR
select PR.PRNUM
FROM MAXIMO.PR
WHERE PR.ISSUEDATE > to_date(STARTDATE) AND PR.ISSUEDATE < to_date(ENDDATE)
END MANAGEMENTFEES;我使用以下.Net代码查询它。
OracleConnection connection = getConnection();
connection.Open();
string startDate = new DateTime(2019, 1, 1).ToString("dd-MMM-yy");
string endDate = new DateTime(2019, 5, 1).ToString("dd-MMM-yy");
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;
cmd.CommandText = "ORACLE.MANAGEMENTFEES";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("STARTDATE", OracleDbType.Varchar2).Value =startDate;
cmd.Parameters.Add("ENDDATE", OracleDbType.Varchar2).Value = endDate;
cmd.Parameters.Add("cursor_", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);这给了我一个空白的数据表,但它确实有标题。所以这告诉我查询没有得到任何结果。我一直在使用多个堆栈溢出答案更改日期参数,但我没有得到任何结果。
如果我在过程中硬编码日期,它工作得很好,但我希望能够传入不同的日期。
帮助?
更新-添加了具有硬编码日期的代码
create or replace PROCEDURE MANAGEMENTFEES
(
STARTDATE IN DATE
, ENDDATE IN DATE
, cursor_ OUT sys_refcursor
) AS
BEGIN
OPEN cursor_ FOR
select PR.PRNUM
FROM MAXIMO.PR
WHERE PR.ISSUEDATE > '01-JAN-19' AND PR.ISSUEDATE < '01-MAY-19'
ORDER BY ISSUEDATE ASC;
END MANAGEMENTFEES;发布于 2019-06-17 21:34:32
您的过程应该如下所示:
create or replace PROCEDURE MANAGEMENTFEES
(
STARTDATE IN DATE
, ENDDATE IN DATE
, cursor_ OUT sys_refcursor
) AS
BEGIN
OPEN cursor_ FOR
select PR.PRNUM
FROM MAXIMO.PR
WHERE PR.ISSUEDATE > STARTDATE AND PR.ISSUEDATE < ENDDATE
END MANAGEMENTFEES;在.NET中的调用是这样的:
DateTime startDate = new DateTime(2019, 1, 1);
DateTime endDate = new DateTime(2019, 5, 1);
...
cmd.Parameters.Add("STARTDATE", OracleDbType.Date).Value = startDate;
cmd.Parameters.Add("ENDDATE", OracleDbType.Date).Value = endDate;发布于 2019-06-18 18:38:08
现在这个问题已经解决了,它是由使用STARTDATE和ENDDATE引起的(尽管没有抛出错误)。
将它们更改为v_STARTDATE和v_ENDDATE解决了问题。
https://stackoverflow.com/questions/56631567
复制相似问题