【问题标题】:Stored proc date query is not working存储过程日期查询不起作用
【发布时间】:2014-04-04 12:55:01
【问题描述】:

我一直在比较 plsql 编程中的两个日期。

我有 2 个存储过程。第一个存储过程将日期列作为OUT 参数返回给我。 我将第一个输出参数作为第二个存储过程的输入参数传递。

但我的查询没有返回正确的值。

存储过程#1:

PROCEDURE SP_FIRST_COMPLETE(TASK_ID IN VARCHAR2, FIRST_COMPLETE_DT OUT DATE)
IS

...
BEGIN
...
...
DBMS_OUTPUT.PUTLINE('First completed dt is:= '||FIRST_COMPLETE_DT);
.....
end;

存储过程#2:

PROCEDURE SP_NOT_FIRST_COMPLETE(TASK_ID IN VARCHAR2, FIRST_COMPLETE_DT IN DATE, FIRST_COMPLETE_DT1 OUT DATE)
IS
....
BEGIN
DBMS_OUTPUT.PUTLINE('First completed dt is:= '||FIRST_COMPLETE_DT);

 FOR R_ROW IN    (SELECT ........ FROM .... WHERE EVENT_DT > FIRST_COMPLETE_DT ORDER BY EVENT_DT

LOOP

DBMS_OUTPUT.PUTLINE('First completed dt is:= '||FIRST_COMPLETE_DT||'   QUERY RESULT  DATE :='||R_ROW.EVENT_DT);
.....
END;

1ST STORED PROC OUTPUT

First completed dt is:= 14-FEB-14

2ND STORED PROC OUTPUT

First completed dt is:= 14-FEB-14
First completed dt is:= 14-FEB-14   QUERY RESULT  DATE :=  28-FEB-12

当我在 SQL 中运行查询时,它会给出正确的结果。

select ... from.... where event_dt > '18-FEB-14' order by event_dt;

请在这方面提供帮助。

谢谢 萨尔玛

【问题讨论】:

  • 我只能想到一种可能发生这种情况的方法,但我想确认一下。 EVENT_DT 声明为什么类型?

标签: sql stored-procedures plsql plsqldeveloper stored-functions


【解决方案1】:

请查看它应该是什么并与您的代码进行比较:

CREATE OR REPLACE PROCEDURE SP_FIRST_COMPLETE (
   TASK_ID             IN     VARCHAR2,
   FIRST_COMPLETE_DT     IN OUT DATE)
IS
BEGIN

   DBMS_OUTPUT.PUT_LINE ('First date is:= ' || 
   TO_DATE(FIRST_COMPLETE_DT, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH')
   );
END;


CREATE OR REPLACE PROCEDURE SP_NOT_FIRST_COMPLETE (
   TASK_ID              IN     VARCHAR2,
   FIRST_COMPLETE_DT    IN     DATE,
   FIRST_COMPLETE_DT1      OUT DATE)
IS
BEGIN

   FIRST_COMPLETE_DT1 := TO_DATE(FIRST_COMPLETE_DT, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH');
   DBMS_OUTPUT.PUT_LINE ('Second date is:= ' || FIRST_COMPLETE_DT1); 

END;

执行

DECLARE
   THE_OUTPUT_DATE1  DATE ;
   THE_OUTPUT_DATE2  DATE ;
BEGIN

   THE_OUTPUT_DATE1 := SYSDATE;
   SP_FIRST_COMPLETE (1, THE_OUTPUT_DATE1);
   SP_NOT_FIRST_COMPLETE (1, THE_OUTPUT_DATE1, THE_OUTPUT_DATE2);

   DBMS_OUTPUT.PUT_LINE('Output date ' || TO_DATE(THE_OUTPUT_DATE2, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH'));
END;

DBMS 输出然后是你想要的:

First Date is:= 06-APR-14
Second Date  is:= 06-APR-14
Output date: 06-APR-14

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多