powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01830: date format picture ends before converting entire input string
23 сообщений из 48, страница 2 из 2
Период между сообщениями больше года.
ORA-01830: date format picture ends before converting entire input string
    #39979305
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня почему-то такую ошибку выдала следующая строка в разделе where:
Код: sql
1.
trunc(t.max_date, 'MM')=trunc(sysdate, 'MM')



При этом если в раздел select вывести trunc(t.max_date, 'MM') x1, trunc(sysdate, 'MM') x2, то выводятся нормальные даты.

Ещё я пробовал в разделе where вместо
Код: sql
1.
trunc(t.max_date, 'MM')-trunc(sysdate, 'MM')

указывать
Код: sql
1.
trunc(t.max_date, 'MM')-trunc(sysdate, 'MM')=0

- всё равно выскакивает ORA-01830.

В чём тут дело и как это исправить?

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979309
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,

какой тип t.max_date? ето поле таблицы?

.....
stax
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979317
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Pastic,

какой тип t.max_date? ето поле таблицы?

.....
stax


В том-то и дело, что Date.
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979320
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот полный текст запроса:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select trunc(t.rep_date, 'MM') x1, trunc(sysdate, 'MM') x2, rep_date, partition_name, table_name
from
  (select to_date(substr(partition_name, 2, 10), 'yyyymmdd') rep_date,
     partition_name, table_name
   from all_tab_partitions atp
   where table_owner='DWHV'
     and atp.partition_name like 'P%') t
where trunc(t.rep_date, 'MM')<>trunc(sysdate, 'MM')
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979348
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic,
А точно в этой строке ошибка?

У Вас идет конвертация имен партиций в формат
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979381
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, вот так работает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t as
  (select /*+ materialize */ to_date(substr(partition_name, 2, 10), 'yyyymmdd') rep_date,
     partition_name, table_name
   from all_tab_partitions
   where table_owner='DWHV'
     and partition_name like 'P%')
select rep_date, partition_name, table_name
from t
where trunc(t.rep_date, 'MM')<>trunc(sysdate, 'MM')
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979391
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic

Код: plsql
1.
substr(partition_name, 2, 10)



Для справки
Это означает:
вернуть из строки partition_name подстроку длиной 10 (десять) символов,
начиная с 2 (второго) символа строки partition_name

Код: plsql
1.
2.
3.
4.
5.
SQL> SELECT substr('1234567890ABCDEF', 2, 10) AS substr FROM dual;

SUBSTR    
----------
234567890A
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979398
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Pastic

Код: plsql
1.
substr(partition_name, 2, 10)




Для справки
Это означает:
вернуть из строки partition_name подстроку длиной 10 (десять) символов,
начиная с 2 (второго) символа строки partition_name

Код: plsql
1.
2.
3.
4.
5.
SQL> SELECT substr('1234567890ABCDEF', 2, 10) AS substr FROM dual;

SUBSTR    
----------
234567890A



Да, но дело было не в этом.
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979410
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus

Для справки

надо план смотреть
у Pastic
сначала to_date(substr(partition_name, 2, 10), 'yyyymmdd'), а потом table_owner='DWHV' and atp.partition_name like 'P%'

.....
stax
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979452
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic
SQL*Plus
пропущено...

Для справки
Это означает:
вернуть из строки partition_name подстроку длиной 10 (десять) символов,
начиная с 2 (второго) символа строки partition_name

Код: plsql
1.
2.
3.
4.
5.
SQL> SELECT substr('1234567890ABCDEF', 2, 10) AS substr FROM dual;

SUBSTR    
----------
234567890A



Да, но дело было не в этом.

А в чём?


Что возвращает
Код: plsql
1.
2.
3.
4.
SELECT DISTINCT LENGTH(substr(partition_name, 2, 10)) AS len_rep_date
from all_tab_partitions atp
where table_owner='DWHV'
  and atp.partition_name like 'P%'

?
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979475
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

При использовании представлений словаря можно столкнуться с пробросом вычисления выражений до итогового фильтра.

Аналогичная ситуация, например, с вызовом dbms_metadata.get_ddl по dba_views, когда функция применяется на obj#.name до отсечки по типу объекта.

upd.

Код: plsql
1.
2.
3.
4.
select view_name from dba_views where owner = 'SYSTEM' and dbms_metadata.get_ddl('VIEW', view_name, owner) like '%any%';

ORA-31603: объект "AQ$_INTERNET_AGENTS" с типом VIEW не найден в схеме "SYSTEM"
ORA-06512: на  "SYS.DBMS_METADATA", line 6731
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979563
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Pastic
пропущено...


Да, но дело было не в этом.

А в чём?


Как и пояснил env - проблема в вычислении выражения до фильтра при обращении к системным словарям, поскольку all_tab_partitions - это не таблица, а представление.

SQL*Plus

Что возвращает
Код: plsql
1.
2.
3.
4.
SELECT DISTINCT LENGTH(substr(partition_name, 2, 10)) AS len_rep_date
from all_tab_partitions atp
where table_owner='DWHV'
  and atp.partition_name like 'P%'


?


1
6
2
5
4
8
3
9
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979569
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic

Как и пояснил env - проблема в вычислении выражения до фильтра при обращении к системным словарям, поскольку all_tab_partitions - это не таблица, а представление.


Нет. Представим что all_tab_partitions таблица:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select trunc(t.rep_date, 'MM') x1, trunc(sysdate, 'MM') x2, rep_date, partition_name, table_name
from
  (select to_date(substr(partition_name, 2, 10), 'yyyymmdd') rep_date,
     partition_name, table_name
   from all_tab_partitions atp
   where table_owner='DWHV'
     and atp.partition_name like 'P%') t
where trunc(t.rep_date, 'MM')<>trunc(sysdate, 'MM')



CTE (a.к.a WITH) не гарантирует материализацию и посему мы должны понимать что можем столкнуться с:

Код: plsql
1.
2.
3.
   where table_owner='DWHV'
     and partition_name like 'P%'
     and trunc(rep_date, 'MM')<>trunc(sysdate, 'MM')



и что условия WHERE могут выполнятся в любом порядке. И если trunc(rep_date, 'MM')<>trunc(sysdate, 'MM') будет выполнено первым, то и можем нарваться на ORA-01830.

SY.
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979598
Фотография Pastic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
и что условия WHERE могут выполнятся в любом порядке. И если trunc(rep_date, 'MM')<>trunc(sysdate, 'MM') будет выполнено первым, то и можем нарваться на ORA-01830.

SY.


Да, но недетерминированная функция rownum в подзапросе спасает от этой неприятности:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select trunc(t.rep_date, 'MM') x1, trunc(sysdate, 'MM') x2, rep_date, partition_name, table_name
from
  (select to_date(substr(partition_name, 2, 10), 'yyyymmdd') rep_date,
     partition_name, table_name, rownum rn
   from all_tab_partitions atp
   where table_owner='DWHV'
     and atp.partition_name like 'P%') t
where trunc(t.rep_date, 'MM')<>trunc(sysdate, 'MM')
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979615
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic

Да, но недетерминированная функция rownum в подзапросе спасает от этой неприятности:


В огороде бузина... И причем тут "это не таблица, а представление"?

SY.
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979736
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Pastic

Да, но недетерминированная функция rownum в подзапросе спасает от этой неприятности:


В огороде бузина... И причем тут "это не таблица, а представление"?

SY.


rownum во where заставит "материализировать" и ошибка должна уйти

and atp.partition_name like 'P%' and rownum<1234567890

ps
можно обрамить decode/case, но некрасиво

.....
stax
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979754
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
SY
пропущено...
И причем тут "это не таблица, а представление"?

rownum во where заставит "материализировать"

Ходили слухи, что в самых свежих версиях это уже не так.
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979838
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pastic

SQL*Plus

Что возвращает
Код: plsql
1.
2.
3.
4.
SELECT DISTINCT LENGTH(substr(partition_name, 2, 10)) AS len_rep_date
from all_tab_partitions atp
where table_owner='DWHV'
  and atp.partition_name like 'P%'


?

1
6
2
5
4
8
3
9

Какие-то строки, используемые при преобразовании в дату имеют длину 9 символов
Это и вызывает
ORA-01830: date format picture ends before converting entire input string
Покажите, что это за строки.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> select to_date('20200712', 'yyyymmdd') from dual;

TO_DATE('20200712',
-------------------
12.07.2020 00:00:00

SQL> select to_date('202007123', 'yyyymmdd') from dual;

Error starting at line : 32 in command -
select to_date('202007123', 'yyyymmdd') from dual
Error report -
ORA-01830: шаблон формата даты завершается перед преобразованием всей строки ввода


На ошибку ORA-01830 вы налетели в первую очередь.
А могли бы налететь и на ORA-01840: input value not long enough for date format
для строк с длиной меньше семи-восьми.
Покажите, что это за строки.
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979846
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus

Покажите, что это за строки.


у Pastic нет таких строк, иначе БЫ слетало 22167052

.....
stax
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979854
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
SQL*Plus

Покажите, что это за строки.


у Pastic нет таких строк, иначе БЫ слетало 22167052

Я эти строки не придумал.
По моей просьбе автор сам их показал
22167311
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979855
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Stax
пропущено...

rownum во where заставит "материализировать"

Ходили слухи, что в самых свежих версиях это уже не так.


если выражение от rownum сложное (напр sin(rownum) ...), тож не так?

расказывали что rownum>0 может проигнорировать, тут ясно

но для and rownum<123456 непонятен механизм,
для этого нужно гарантировано знать к-во строк выборки, тем более для вью

....
stax
...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979870
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Stax
rownum во where заставит "материализировать" и ошибка должна уйти

and atp.partition_name like 'P%' and rownum<1234567890


http://orasql.org/2019/02/16/lateral-view-decorrelationvw_dcl-causes-wrong-results-with-rownum/


Stax
and atp.partition_name like 'P%' and rownum<1234567890
нельзя так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select * 
from (select * from table(odcinumberlist(1,1,1,2,2,2,3,3,3)) order by 1)
where rownum <= 2
  and column_value = 3;
 
 
COLUMN_VALUE
------------
           3
           3

select * 
from (select *
      from (select * from table(odcinumberlist(1,1,1,2,2,2,3,3,3)) order by 1)
      where rownum <= 2
     )
where column_value = 3;
 
no rows selected


...
Рейтинг: 0 / 0
ORA-01830: date format picture ends before converting entire input string
    #39979884
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

lateral+rownum видел ссылку, ето несколько другое, возможно баг

1234567890 заведомо больше чем строк в таблице

пусть rownum<1e+62

зы
у меня непонятки были и с with union all + rownum, плюнул и переписал

....
stax
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ORA-01830: date format picture ends before converting entire input string
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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