Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск столбца в таблице с помощью цикла plsql / 25 сообщений из 26, страница 1 из 2
02.02.2020, 11:15
    #39921429
dasha07
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
Добрый день, я начинающий пользователь pl sql, подскажите пожалуйста, как можно решить подобную задачу.
Есть таблица, которую нужно обработать, имеет 5 столбцов: col1,col2,col3,col4,col5:
create table test (
col1 varchar2(100),
col2 varchar2(100),
col3 varchar2(100),
col4 varchar2(100),
col5 varchar2(100));

insert into test (col1,col2,col3,col4,col5) values ('1', '123', '123','10.06.2019','234')
insert into test (col1,col2,col3,col4,col5) values ('456', '3', '156','10.07.2019','2')
insert into test (col1,col2,col3,col4,col5) values ('3', '123', '23','10.08.2019','234')

В столбце col4 находится дата - проблема в том, что дата может находится каждый раз в разном столбце, алгоритм обработки нужен универсальный, как можно пройтись поочередно по всем столбцам таблицы и определить в каком столбце все записи длиной 10 (length(coln) = 10), запомнить имя столбца и дальше его передать в select, который будет уже обрабатывать таблицу?

Заранее спасибо!
...
Рейтинг: 0 / 0
02.02.2020, 13:56
    #39921455
iOracleDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
...
Рейтинг: 0 / 0
02.02.2020, 15:00
    #39921465
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
задача как раз для начинающего
чтобы изучил форматы текстовых представлений дат, подумал о NLS и всякой прочей фигне
например, является ли датой строка 31-02-2020
...
Рейтинг: 0 / 0
03.02.2020, 09:29
    #39921628
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
dasha07
дата может находится каждый раз в разном столбце, алгоритм обработки нужен универсальный, как можно пройтись поочередно по всем столбцам таблицы и определить в каком столбце все записи длиной 10 (length(coln) = 10)

Т.е. это тоже дата?
Код: plsql
1.
Hello, bro
...
Рейтинг: 0 / 0
03.02.2020, 10:00
    #39921641
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
Synoptic
Т.е. это тоже дата?
Код: plsql
1.
Hello, bro

Зависит от... Любая строка до 70 байт может выступать в качестве даты
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select to_date('Hello, bro') "Date?" from dual;

Date?
----------
Hello, bro

SQL> select to_date('Good bye, sis') "Date?" from dual;
select to_date('Good bye, sis') "Date?" from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string
...
Рейтинг: 0 / 0
03.02.2020, 11:19
    #39921684
chidoriami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
dasha07,

задача какая-то слишком учебная =)
действительно, определять, является ли столбец датой по его длине - путь в никуда.
Можно написать примерно такую функцию, прописав в ней все допустимые по задаче форматы даты
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or replace function is_date(in_str varchar2)
return date
is
    v_res   date;
begin
    begin
        v_res := to_date(in_str,'dd.mm.yyyy');
    exception
        when others then 
        begin
            v_res := to_date(in_str,'yyyy.mm.dd');
        exception
            when others then v_res := null;
        end;
    end;
    return v_res;
end;
/



затем достаточно, наверное, обработать только первую строку таблицы, определить, в каком столбце дата, запомнить его название и выплюнуть table с этим столбцом, приведенным к дате.
для этого придется почитать про табличные функции,
например Oracle – табличные конвейерные функции
...
Рейтинг: 0 / 0
03.02.2020, 11:35
    #39921699
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
chidoriami
затем достаточно
Всего достаточно: select coalesce(to_date(col1...), to_date(col2...), ...) firstdateval from test.
pl/sql здесь незачем.
...
Рейтинг: 0 / 0
03.02.2020, 12:38
    #39921739
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
chidoriami
Код: plsql
1.
when others then 


уверены, что так надо писать?
...
Рейтинг: 0 / 0
03.02.2020, 13:18
    #39921774
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
alex-ls
chidoriami
Код: plsql
1.
when others then 

уверены, что так надо писать?
В процитированном нет криминала.
...
Рейтинг: 0 / 0
03.02.2020, 13:42
    #39921798
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
Elic
alex-ls
пропущено...
уверены, что так надо писать?
В процитированном нет криминала.

зачем же "ловить" others, когда цель конкретная ошибка?
...
Рейтинг: 0 / 0
03.02.2020, 13:46
    #39921802
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
alex-ls
конкретная ошибка
PL/SQL-но сформулировать её конкретную сможешь?
...
Рейтинг: 0 / 0
03.02.2020, 14:00
    #39921811
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
одну нет конечно, их там "кучка"
...
Рейтинг: 0 / 0
03.02.2020, 14:01
    #39921814
chidoriami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
-2-,
ну вообще да, можно и запросом обойтись.
там че-то не совсем понятно, какой результат ожидаем
...
Рейтинг: 0 / 0
03.02.2020, 14:16
    #39921820
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
alex-ls
одну нет конечно, их там "кучка"
И тем не менее ты не показал, как обойдёшься без others.
...
Рейтинг: 0 / 0
03.02.2020, 14:22
    #39921825
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
Elic
alex-ls
одну нет конечно, их там "кучка"
И тем не менее ты не показал, как обойдёшься без others.

Я не говорил что надо без него обойтись. Мне не понравилось, что нет логирования или перечисления ошибок, которые сработали, т.е. понять постфактум, что произошло не получиться.
...
Рейтинг: 0 / 0
03.02.2020, 14:36
    #39921831
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
alex-ls
что произошло не получиться
Допустим, по приведенным автором данным залогировалось 12 разнообразных ошибок. Что же произошло??
...
Рейтинг: 0 / 0
03.02.2020, 14:49
    #39921839
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
-2-
alex-ls
что произошло не получиться
Допустим, по приведенным автором данным залогировалось 12 разнообразных ошибок. Что же произошло??

логирование и покажет, что произошло. например 01.99.2020 будет неверный месяц
...
Рейтинг: 0 / 0
03.02.2020, 15:36
    #39921870
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
alex-ls
Мне не понравилось, что нет логирования или перечисления ошибок, которые сработали, т.е. понять постфактум, что произошло не получиться.
Но процитировал ты не это.
...
Рейтинг: 0 / 0
03.02.2020, 15:50
    #39921880
chidoriami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
все зависит от нашей цели =)
нафига тут логировать ошибки, если мы собираемся использовать это в запросе и искать таким образом валидные даты?
мы ж применим эту функцию ко всем столбцам, и в них полный расколбас
...
Рейтинг: 0 / 0
03.02.2020, 16:03
    #39921886
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
chidoriami
все зависит от нашей цели =)
нафига тут логировать ошибки, если мы собираемся использовать это в запросе и искать таким образом валидные даты?
мы ж применим эту функцию ко всем столбцам, и в них полный расколбас
помню, лет 15 назад читали мы по линку даты из намбер столбца из чужой бд (rrrrmmdd)
лет 5 или 6
пока не свалилась ошибка на 30-м февраля
...
Рейтинг: 0 / 0
03.02.2020, 16:33
    #39921902
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
Cast(... On conversion error...)
...
Рейтинг: 0 / 0
03.02.2020, 17:37
    #39921937
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
Elic
alex-ls
Мне не понравилось, что нет логирования или перечисления ошибок, которые сработали, т.е. понять постфактум, что произошло не получиться.
Но процитировал ты не это.

да тут признаю. в голове одно, а цитирую немного не то. не в первый раз уже...
...
Рейтинг: 0 / 0
03.02.2020, 17:39
    #39921938
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
alex-ls
-2-
пропущено...
Допустим, по приведенным автором данным залогировалось 12 разнообразных ошибок. Что же произошло??

логирование и покажет, что произошло. например 01.99.2020 будет неверный месяц
Это не аргументирует детализацию when others до not_a_valid_month.
И не объясняет, зачем вообще нужно знать про наличие некорректных значений.
...
Рейтинг: 0 / 0
03.02.2020, 20:47
    #39922036
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
xtender
Cast(... On conversion error...)
это с 12-ой версии?
...
Рейтинг: 0 / 0
04.02.2020, 02:53
    #39922094
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск столбца в таблице с помощью цикла plsql
-2-
alex-ls
пропущено...

логирование и покажет, что произошло. например 01.99.2020 будет неверный месяц
Это не аргументирует детализацию when others до not_a_valid_month.
И не объясняет, зачем вообще нужно знать про наличие некорректных значений.

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


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