无法获取今天的数据

时间:2017-02-13 12:38:12

标签: sql database oracle

我有以下程序MY_PROC。

 CREATE PROCEDURE MY_PROC(
    IN_VAR_FROM_DATE IN VARCHAR2,
    OUT_DATA OUT SYS_REFCURSOR )
AS
  TEMP_DATE DATE;
BEGIN
  TEMP_DATE :        = NVL(TO_DATE(IN_VAR_FROM_DATE,'DD-MON-RRRR'),SYSDATE);
  IF(IN_VAR_FROM_DATE='CM') THEN
    TEMP_DATE       := SYSDATE;
  END IF;
  OPEN OUT_DATA FOR SELECT * FROM TABLE_NAME WHERE DATE_COLUMN>=TRUNC(TEMP_DATE );
EXCEPTION
WHEN OTHERS THEN
  NULL;
END MY_PROC;

现在在上面的proc中,当我传递null作为输入参数时,我正在获取sysdate的值。当我将“CM”作为输入参数传递但我没有获得数据时我想要相同的。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:2)

嗯。 。 。我认为这是你想要的逻辑:

OPEN OUT_DATA FOR
    SELECT *
    FROM TABLE_NAME
    WHERE DATE_COLUMN >= (CASE WHEN IN_VAR_FROM_DATE IS NULL OR IN_VAR_FROM_DATE  = 'CM'
                               THEN TRUNC(sysdate)
                               ELSE TO_DATE(IN_VAR_FROM_DATE, 'DD-MON-RRRR')
                          END);

答案 1 :(得分:1)

我认为这是因为当你通过CM'作为输入参数,您的过程会尝试将CM转换为日期,并且在这种情况下您将获得异常。

CREATE PROCEDURE MY_PROC(
    IN_VAR_FROM_DATE IN VARCHAR2,
    OUT_DATA OUT SYS_REFCURSOR )
AS
  TEMP_DATE DATE;
BEGIN


  IF(IN_VAR_FROM_DATE='CM') THEN
    TEMP_DATE       := SYSDATE;
  ELSE
    TEMP_DATE :        = NVL(TO_DATE(IN_VAR_FROM_DATE,'DD-MON-RRRR'),SYSDATE);
  END IF;
  OPEN OUT_DATA FOR SELECT * FROM TABLE_NAME WHERE DATE_COLUMN>=TRUNC(TEMP_DATE );
EXCEPTION
WHEN OTHERS THEN
  NULL;
END MY_PROC;