Получение значения DATE из форм оракула с использованием USER EXIT

Я пытаюсь использовать EXEC TOOLS GET для извлечения поля даты из ORACLE FORMS в переменную char следующим образом:

EXEC TOOLS GET filter.generation_depuis INTO :qstrGenerationDepuis;

Когда я пытаюсь отобразить переменную qstrGenerationDepuis, я получаю это значение:

27-JANV.-2 

Вместо :

27/01/2020

Зная, что переменная qstrGenerationDepuis объявлена ​​как строка из 10 символов.

Как мне получить поле в пользовательском выходе, чтобы получить правильный формат даты?

Расширение файла выхода пользователя — .pcs.

Заранее большое спасибо.


person Karim Tebini    schedule 05.02.2020    source источник


Ответы (1)


Как насчет двухэтапной процедуры?

Сначала получите значение:

EXEC TOOLS GET filter.generation_depuis INTO :qstrGenerationDepuis;

который устанавливает элемент в 27-JANV.-2

Затем конвертируйте его в нужный формат, но сначала вы должны знать, какой формат вы получили. Это француз, не так ли? Похоже на 27th of January of ... какого года? Что такое -2? Это может быть любой год между 2020 и 2029, потому что переменная имеет длину 10 символов:

SQL> select to_char(date '2020-01-27', 'dd-MON-yy', 'nls_date_language = french') datum from dual;

DATUM
-----------
27-JANV.-20
         ^ tenth character is "2"; "0" is lost
12345678901

Если мы предполагаем, что это текущий год, вы можете попробовать что-то вроде этого:

  • преобразовать строку 27-JANV.-2 в дату, добавив последнюю цифру текущего года (это то, что делает substr)
  • применить to_char к новому значению даты, 27-JANV.-20, с желаемой маской формата

    SQL> select to_char(to_date('27-JANV.-2' || substr(to_char(sysdate, 'yyyy'), -1),
      2                         'dd-mon-rr',
      3                         'nls_date_language = french'),
      4                 'dd/mm/yyyy') result
      5  from dual;
    
    RESULT
    ----------
    27/01/2020
    

Не то, чтобы это невозможно (очевидно), но - вы бы предпочли

  • вернуть желаемую маску формата из filter.generation_depuis
  • или, если это невозможно, увеличьте длину элемента/переменной как минимум до 11 символов, потому что вы потеряете последнюю цифру

Обратите внимание, что вам, вероятно, не нужно использовать параметр nls_date_language; Да, так как моя база данных работает на хорватском языке, а наш формат сильно отличается от вашего.

person Littlefoot    schedule 05.02.2020