powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / raise
19 сообщений из 19, страница 1 из 1
raise
    #40029633
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как написать raise если на вход функции пришел date не в формате DD.MM.YYYY
...
Рейтинг: 0 / 0
raise
    #40029641
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

Код: plsql
1.
raise_application_error(-20001, 'пришел date не в формате DD.MM.YYYY ');
...
Рейтинг: 0 / 0
raise
    #40030792
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

это понятно что raise как мне условие на параметр написать в разделе begin если он пришел не в верном формате?

например если p_calc_date is null то я пишу

if p_calc_date is null then
raise_application_error(-20100, 'Не задан обязательный параметр')
end;

а как мне написать что p_calc_date не пришел в формате to_date(p_calc_date, 'dd.mm.yyyy) ?
...
Рейтинг: 0 / 0
raise
    #40030793
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Входной параметр p_calc_date какой тип имеет?
...
Рейтинг: 0 / 0
raise
    #40030796
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  l_date date;
begin
  ..
  begin
    l_date := to_date(p_calc_date, 'DD.MM.YYYY');
  exception
    when value_error then
      raise_application_error(-20001, 'пришел date не в формате DD.MM.YYYY');
  end;
end;
...
Рейтинг: 0 / 0
raise
    #40030813
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

Сделать входной параметр типом date. И всё равно, при передаче даты строкой, это не спасёт от NLS-зависимых значений.

Например, строка '03.08.2020' - это третье августа или всё же восьмое марта? По маске пройдёт.
...
Рейтинг: 0 / 0
raise
    #40030865
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
x17.mstu,

Сделать входной параметр типом date. И всё равно, при передаче даты строкой, это не спасёт от NLS-зависимых значений.

Например, строка '03.08.2020' - это третье августа или всё же восьмое марта? По маске пройдёт.


Исходя из "Подскажите как написать raise если на вход функции пришел date не в формате DD.MM.YYYY" TC не понимает что actual параметр в в ф-цию всегда приходит в типе formal параметра и такой raise есть полный бред.
TC: '03.08.2020' будет неявно преобразовано клиентом вызывающим ф-цию исходя из NLS_DATE_FORMAT клиента а ф-ция уже получит DATE. Так что будет эта DATE третье августа или восьмое марта от ф-ции абсолютно не зависит.

SY.
...
Рейтинг: 0 / 0
raise
    #40030867
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, дошло. У TC тип параметра строка а по логике это дата.

SY.
...
Рейтинг: 0 / 0
raise
    #40030873
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
А, дошло. У TC тип параметра строка а по логике это дата.


Однако в его соседнем топике "Как вызвать функцию, если один из параметров date" что меня и смутило. ТС должен прояснить тип formal параметра.

SY.
...
Рейтинг: 0 / 0
raise
    #40030892
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,

раньше был date, сейчас in varchar2 default null
...
Рейтинг: 0 / 0
raise
    #40030894
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,


НО далее в блоке после IS я обьявляю l_calc_date date;

в блоке begin end

l_calc_date:= case when p_calc_date is not null then to_date(p_calc_date, 'dd.mm.yyyy') else trunc(sysdate, 'mm') end;

вот
...
Рейтинг: 0 / 0
raise
    #40030897
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
raise
    #40030956
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Anokhin


Ну и что это даст в случае '03.08.2020'? Я бы (USA) так передал восьмое марта и получил бы неправильный результат. Уже N раз объясняли TC - нельзя даты передавать строками, разве-что вкупе с строкой формата.

SY.
...
Рейтинг: 0 / 0
raise
    #40030977
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Уже N раз объясняли TC - нельзя даты передавать строками, разве-что вкупе с строкой формата.


Если нельзя, но очень хочется, то можно.
...
Рейтинг: 0 / 0
raise
    #40031010
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic
SY
Уже N раз объясняли TC - нельзя даты передавать строками, разве-что вкупе с строкой формата.


Если нельзя, но очень хочется, то можно.


Нельзя протокол нарушать.
А даты можно повсякому передавать, но согласно протоколу.
Тип Date допускает несуществующие даты. Проверкой валидности даты занимается функция to_date.
В целом она надёжнее, чем собирать бинарный формат DATE иными средствами.
...
Рейтинг: 0 / 0
raise
    #40031031
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Тип Date допускает несуществующие даты.


Можно по-подробнее?
...
Рейтинг: 0 / 0
raise
    #40031038
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic
mcureenab
Тип Date допускает несуществующие даты.


Можно по-подробнее?


date, это 7 байт. 2 байта - год с эпохой, 5 байтов (по одному) под месяц, день, час, минуту и сек. в них можно записать 256 месяцев, 256 дней месяца, 256 часов и т.д. В PL/SQL кроме как через to_date даты не получаются. И to_date проверит дату по календарю. А на языках типа C, вполне возможно сконструировать 2020/12/32 00:15:60.

Формат NUMBER тоже допускает несуществующие числа. Один разряд NUMBER это цифра от 00 до 99, а памяти под неё байт, который допускает 0-255. Число "сто двести пятьдесят" не такое уж бредовое оказывается.
...
Рейтинг: 0 / 0
raise
    #40031051
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic
mcureenab
Тип Date допускает несуществующие даты.
Можно по-подробнее?
date > 24.00.00
...
Рейтинг: 0 / 0
raise
    #40031055
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера как раз прислали очередной одноразовый (проверка новой задачи) эксель из SAPа для загрузки в мсскл, на 270 тыс строк
В одной колонке даты оказались самого любого формата, включая 17 авг и 00.00.0000

Поругались и договорились, что эту колонку загружать не имеет смысла
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / raise
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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