Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как вызвать функцию, если один из параметров date / 14 сообщений из 14, страница 1 из 1
22.12.2020, 12:12
    #40030080
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
Как вызвать функцию, если один из параметров date

Есть функция с входным параметром p_calc_date in date

Можно ли как-нибудь вызвать функцию при этом не преобразовывая в date

Select f_api_func(to_date('01.08.2020', 'dd.mm.yyyy')) from dual; - так вызывается ошибки нет

При попытке вызвать Select f_api_func('01.08.2020') from dual; -> not a valid month
...
Рейтинг: 0 / 0
22.12.2020, 12:25
    #40030087
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
Можно, но категорически не нужно.
...
Рейтинг: 0 / 0
22.12.2020, 12:28
    #40030089
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
andrey_anonymous,
Почему ?
...
Рейтинг: 0 / 0
22.12.2020, 12:39
    #40030094
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
x17.mstu,

Можно, если преобразовывать неявно, но по статичной маске. Например литеральной записью
Код: plsql
1.
date '2020-01-08'

, вы же восьмое января передаёте на вход?
...
Рейтинг: 0 / 0
22.12.2020, 12:46
    #40030096
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
NLS BOMB.
...
Рейтинг: 0 / 0
22.12.2020, 12:47
    #40030097
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
env
преобразовывать неявно, но по статичной маске. Например литеральной записью

Литерал не дает неявного преобразования.
Вполне подходит для запросов "руками".
...
Рейтинг: 0 / 0
22.12.2020, 14:29
    #40030153
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
andrey_anonymous,

если дату надо со временем, то использовать TIMESTAMP?

.....
stax
...
Рейтинг: 0 / 0
22.12.2020, 14:30
    #40030155
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
andrey_anonymous
Литерал не дает неявного преобразования.

Хорошо, назовём это явным преобразованием

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> explain plan for
  2  select dummy from dual where sysdate = date '2020-01-01';

Explained.

SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
------------------------------------------------------------
Plan hash value: 3752461848

----------------------------------------------------
| Id  | Operation                  | Name | E-Rows |
----------------------------------------------------
|   0 | SELECT STATEMENT           |      |      1 |
|*  1 |  FILTER                    |      |        |
|   2 |   TABLE ACCESS STORAGE FULL| DUAL |      1 |
----------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(SYSDATE@!=TO_DATE(' 2020-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
...
Рейтинг: 0 / 0
23.12.2020, 13:14
    #40030440
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
env
andrey_anonymous
Литерал не дает неявного преобразования.

Хорошо, назовём это явным преобразованием
Код: plsql
1.
  1 - filter(SYSDATE@!=TO_DATE(' 2020-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))


И что Вы этим хотели сказать?
...
Рейтинг: 0 / 0
23.12.2020, 13:42
    #40030455
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
x17.mstu
andrey_anonymous,
Почему ?


преобразование строки в тип date функцией to_date (явно или не явно) зависит от настроек культурной среды.

при неявном вызове to_date все зависит от настроек культурной среды БД или сессии пользователя. при явном вызове to_date , можно указать формат даты во втором аргументе и при необходимости дополнительные настройки NLS в третьем.

Вы можете перед выполнением запросов явно вызвать

ALTER SESSION SET NLS_DATE_FORMAT='dd.mm.yyyy';


и дальше писать

Select f_api_func('01.08.2020') from dual;

без явного вызова to_date.

Еще замечу, что всякие SQL Developer для вывода датасета в виде таблички, использует формат даты из настроек самой программы, и он может не совпадать с настройками культурной среды сессии. Просто скопипастить дату из таблички в область SQL запроса в общем случае не получиться.
...
Рейтинг: 0 / 0
23.12.2020, 14:14
    #40030483
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
andrey_anonymous,

Что литеральная запись всё равно вызовет функцию преобразования строки в дату. Но в этом случае маска будет жёстко зафиксирована.
...
Рейтинг: 0 / 0
23.12.2020, 14:16
    #40030485
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
env
Но в этом случае маска будет жёстко зафиксирована.

Именно. date литерал не зависит от NLS.
...
Рейтинг: 0 / 0
23.12.2020, 19:27
    #40030620
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
andrey_anonymous
Можно, но категорически не нужно.
рассказываешь... потом бьёшь по рукам...
потом всё равно какой-нить олень вставит в джоб to_date('01.01.2020) или to_date(sysdate)
...
Рейтинг: 0 / 0
24.12.2020, 15:24
    #40030863
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать функцию, если один из параметров date
andreymx
andrey_anonymous
Можно, но категорически не нужно.
рассказываешь... потом бьёшь по рукам...
потом всё равно какой-нить олень вставит в джоб to_date('01.01.2020) или to_date(sysdate)

А самое прикольное, когда функция/процедура с параметром с типом date вызывается не из другой PLSQL процедуры,а из другого приложения. Например на java или Oracle Forms/Reports, у которых есть свой PLSQL код, выполняющийся внутри них.
Я потерял счёт переделанным отчетам на Oracle Reports, , где входной параметр с типом дата и маской '\yyyy\mm\dd' падали из-за входного параметра вида '\2012\02\18'.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как вызвать функцию, если один из параметров date / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]