Получение значения DATE из oracle форм с помощью USER EXIT - PullRequest
0 голосов
/ 05 февраля 2020

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

EXEC TOOLS GET filter.generation_depuis INTO :qstrGenerationDepuis;

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

27-JANV.-2 

Вместо:

27/01/2020

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

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

Расширение файла пользовательского выхода - .pcs ​​

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

1 Ответ

1 голос
/ 05 февраля 2020

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

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

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 в дату, добавив последний год текущего года git (это то, что делает 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 символов, поскольку вы потеряете последний ди git

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...