powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как вызвать функцию, если один из параметров date
14 сообщений из 14, страница 1 из 1
Как вызвать функцию, если один из параметров date
    #40030080
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вызвать функцию, если один из параметров 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
Как вызвать функцию, если один из параметров date
    #40030087
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, но категорически не нужно.
...
Рейтинг: 0 / 0
Как вызвать функцию, если один из параметров date
    #40030089
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
Почему ?
...
Рейтинг: 0 / 0
Как вызвать функцию, если один из параметров date
    #40030094
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

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

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

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

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

.....
stax
...
Рейтинг: 0 / 0
Как вызвать функцию, если один из параметров date
    #40030155
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как вызвать функцию, если один из параметров date
    #40030440
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
andrey_anonymous
Литерал не дает неявного преобразования.

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


И что Вы этим хотели сказать?
...
Рейтинг: 0 / 0
Как вызвать функцию, если один из параметров date
    #40030455
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как вызвать функцию, если один из параметров date
    #40030483
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

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

Именно. date литерал не зависит от NLS.
...
Рейтинг: 0 / 0
Как вызвать функцию, если один из параметров date
    #40030620
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Можно, но категорически не нужно.
рассказываешь... потом бьёшь по рукам...
потом всё равно какой-нить олень вставит в джоб to_date('01.01.2020) или to_date(sysdate)
...
Рейтинг: 0 / 0
Как вызвать функцию, если один из параметров date
    #40030863
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как вызвать функцию, если один из параметров date
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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