2013-08-30 1 views
0

Я пытаюсь преобразовать строку в дату, используя следующий код в PL/SQL:ORA-01858 ошибка при использовании функции to_date для преобразования строки в дату

BEGIN 
    vfrom := TO_DATE ('20/08/2013', 'dd/mm/yyyy'); 
    vto := TO_DATE ('30/08/2013', 'dd/mm/yyyy'); 

    OPEN L_CURSOR FOR 
     SELECT DSAT.ORGANIZATION_ID, 
      APPS.DAW_INV_ORG_NAME (DSAT.ORGANIZATION_ID) ORGANIZATION_NAME, 
      APPS.DAW_CAT_NAME (MC.SEGMENT4) PRODUCT, 
      TRUNC (NVL (DSAT.SCH_END_DATE, DSAT.SCH_START_DATE)) 
       TRANSACTION_DATE, 
      TO_CHAR (NVL (DSAT.SCH_END_DATE, DSAT.SCH_START_DATE), 
         'MM-YYYY') 
       MONTH, 
      DSAT.ITEM_SEGMENTS ITEM_CODE, 
      DSAT.ITEM_DESCRIPTION, 
      DSAT.CURRENT_FORECAST_QUANTITY PLAN_QTY 
     FROM APPS.DAW_SCPDB_ASCP_TPP_V DSAT, 
      APPS.MTL_ITEM_CATEGORIES MIC, 
      APPS.MTL_CATEGORIES MC 
     WHERE  NVL (SCH_END_DATE, SCH_START_DATE) BETWEEN '$(vfrom)' 
                 AND '$(vto)' 
      AND MIC.CATEGORY_SET_ID = 1100000061   --- PLANING CATEGORY 
      AND MC.CATEGORY_ID = MIC.CATEGORY_ID 
      AND DSAT.INVENTORY_ITEM_ID = MIC.INVENTORY_ITEM_ID 
      AND DSAT.ORGANIZATION_ID = MIC.ORGANIZATION_ID 
      AND DSAT.FORECAST_SET = '$(vForecastSetDPL2)'; --- Need to Update it on Monthly Basis; 
END PorductPlanningForecast; 

Ошибка возникает

ORA- 01858: был найден нечисловой символ, в котором ожидалось числовое значение в строке 29

, который состоит из курсора открытия для запроса. Я проверил параметры NSL и установил дату в формате здесь в функции to_Date, обыскав по всему Интернету, и все же я не могу понять это. Пожалуйста помоги.

ответ

1

В строке WHERE NVL(SCH_END_DATE,SCH_START_DATE) BETWEEN '$(vfrom)' and '$(vto)' у вас есть неявное преобразование строки '$ (vfrom)' на сегодняшний день. Это не сработает.

Предполагая, что vfrom и vto объявлены как дата, строка должна быть такой, как это WHERE NVL(SCH_END_DATE,SCH_START_DATE) BETWEEN vfrom and vto.

Смежные вопросы