powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование значений в дату
15 сообщений из 65, страница 3 из 3
Преобразование значений в дату
    #39423850
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envNorman94,

Код: plsql
1.
THEN 01.янв||




Подчеркнуть? Жирным выделить? Помахать флажками и дать гудок? Что надо сделать, чтобы вам это бросилось в глаза?

Я эту строчку уже 100 раз видел, говорю же, вне функции этот подход работает, а внутри EXECUTE выдаёт missing keyword. Поэтому и называю это нелогичной ошибкой.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423854
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94Я уже хз сколько отдалок придумывал, всё безтолку. Я у вас просто прошу помочь понять, почему он напрочь не хочет возвращать тип 'dd.mon', а 'dd.mm' спокойно возвращает. Вот и всё. Какая то нелогичная ошибка, учитывая, что я возвращаю ему строку.

Ты все не уймешься, вроде закончил вчера по этой теме, но похоже не до конца =)
Ты пишешь у меня такая ошибка ... но не пишешь с какого селекта.
Когда показывают что селект должен работать, ты говоришь нет, потому что у меня внутри чтот не то.
Вышли хоть раз тот селект который получился после функции, и который выдает ошибки, т.к. у тебя свои таблицы и я например не вижу что вернет твоя функция. Если внутри нее селект валится, выведи его и запусти/напиши отдельно.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423860
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quote MaximaXXL]
Ты все не уймешься, вроде закончил вчера по этой теме, но похоже не до конца =)
Ты пишешь у меня такая ошибка ... но не пишешь с какого селекта.
Код: sql
1.
EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;


Когда показывают что селект должен работать, ты говоришь нет, потому что у меня внутри чтот не то.
Работает первый селект
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '|| to_char(trunc(to_date(i_year,'yyyy'),'y')+((LTRIM(column_name, 'N'))-1)*7,'dd mon')||'||''; '' ELSE NULL END ' ,'||')
То есть здесь всё замечательно. Отдельно вывожу это - всё преобразовывает. Но в функции он уже начинает ругаться на строчку выше.
MaximaXXLВышли хоть раз тот селект который получился после функции, и который выдает ошибки, т.к. у тебя свои таблицы и я например не вижу что вернет твоя функция. Если внутри нее селект валится, выведи его и запусти/напиши отдельно.

Уже выводили с юзером env выше, и отдельно он работал. А внутри функции пишет ошибку. Сама функция выглядит так.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create or replace FUNCTION get_week_list_prob(i_code IN INTEGER, i_year in integer) RETURN VARCHAR2 IS
  l_list  VARCHAR2(32767);
  l_res   VARCHAR2(4000);
BEGIN
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '|| to_char(trunc(to_date(i_year,'yyyy'),'y')+((LTRIM(column_name, 'N'))-1)*7,'dd mm')||'||''; '' ELSE NULL END ' ,'||') 
WITHIN GROUP(ORDER BY 1)
  INTO  l_list
  FROM  user_tab_columns
  WHERE TABLE_NAME = 'GRAFIK' 
  AND column_name LIKE 'N%';
 --dbms_output.enable;
--dbms_output.put_line('SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:' ||i_code||' AND god=:' ||i_year);
--l_res:=('SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:' ||i_code||' AND god=:' ||i_year);
--return l_res;
EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;
return l_res;
END;



Вывести должен выбранные мною недели, но в виде дат (то есть название недели - это число начала недели). С 01.01 он работает, а когда пытаюсь его заставить написать мне буквенное обозначение месяца - пишет missing keyword.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423870
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Norman94]MaximaXXLТы все не уймешься, вроде закончил вчера по этой теме, но похоже не до конца =)
Ты пишешь у меня такая ошибка ... но не пишешь с какого селекта.
Код: sql
1.
EXECUTE IMMEDIATE 'SELECT '||l_list||' FROM GRAFIK WHERE kod_sotr=:A AND god=:year' INTO l_res USING i_code,i_year;


Когда показывают что селект должен работать, ты говоришь нет, потому что у меня внутри чтот не то.
Работает первый селект
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '|| to_char(trunc(to_date(i_year,'yyyy'),'y')+((LTRIM(column_name, 'N'))-1)*7,'dd mon')||'||''; '' ELSE NULL END ' ,'||')
То есть здесь всё замечательно. Отдельно вывожу это - всё преобразовывает. Но в функции он уже начинает ругаться на строчку выше.
пропущено...


Уже выводили с юзером env выше, и отдельно он работал. А внутри функции пишет ошибку. Сама функция выглядит так.
.....

Вывести должен выбранные мною недели, но в виде дат (то есть название недели - это число начала недели). С 01.01 он работает, а когда пытаюсь его заставить написать мне буквенное обозначение месяца - пишет missing keyword.

Вот тут я заплакал, это точно Вы писали?
Код: plsql
1.
regexp_substr (get_week_list_prob(t.kod_sotr,t.god), '([[:digit:]]+)(,)([[:digit:]]+)(;)$'))


И можете объяснить формат регулярки
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423875
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLВот тут я заплакал, это точно Вы писали?
Код: plsql
1.
regexp_substr (get_week_list_prob(t.kod_sotr,t.god), '([[:digit:]]+)(,)([[:digit:]]+)(;)$'))



И можете объяснить формат регулярки

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

Код: sql
1.
select get_week_list_prob(109909,2017) s from dual
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423876
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

Для альтернативно одарённых:

dd.mm
Код: plsql
1.
select case 1 when 1 then 01.01||';' else '!' end from dual;



dd.mon
Код: plsql
1.
select case 1 when 1 then 01.янв||';' else '?' end from dual;
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423877
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

И для излишне альтернативно одарённых:
Код: plsql
1.
select case 1 when 1 then '01.янв'||';' else '?' end from dual;
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423885
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Ничего не изменилось.

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '|| to_char( trunc (to_date(2017||'0101', 'yyyymmdd') 
+ ((LTRIM(column_name,'N'))-1)*7, 'ww'), 'dd mon')||'||''; '' ELSE ''?'' END ' ,'||') 
WITHIN GROUP(ORDER BY 1)
into l_list
  FROM  user_tab_columns
  WHERE TABLE_NAME = 'GRAFIK' 
  AND column_name LIKE 'N%';



Missing keyword.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423894
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envNorman94,

И для излишне альтернативно одарённых:
Код: plsql
1.
select case 1 when 1 then '01.янв'||';' else '?' end from dual;



Уловил суть. Я правильно расставил кавычки?

Код: sql
1.
2.
3.
4.
5.
6.
SELECT listagg('CASE WHEN '||column_name||' IN(''б'') THEN '||q'~ to_char( trunc (to_date(2017||'0101', 'yyyymmdd') 
+ ((LTRIM(column_name,'N'))-1)*7, 'ww'), 'dd.mon')~'||'||''; '' ELSE ''?'' END ' ,'||') 
WITHIN GROUP(ORDER BY 1)
  FROM  user_tab_columns
  WHERE TABLE_NAME = 'GRAFIK' 
  AND column_name LIKE 'N%';
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423901
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envNorman94,

И для излишне альтернативно одарённых:
Код: plsql
1.
select case 1 when 1 then '01.янв'||';' else '?' end from dual;



Всё, исправил. Спасибо вам, Сударь!

А теперь объясните пожалуйста, почему пришлось ставить кавычки, я же указал ему to_char?
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423912
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

потому что
Код: plsql
1.
select to_char(11.11) from dual


и
Код: plsql
1.
select to_char(11.янв) from dual



работают по разному, в 1 случае это число а во втором хз что
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423937
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Спасибо
Кстати вы правильно подметили ту формулу. Теперь когда я её использую он выдаёт null. В чём дело? Формат не тот?
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423967
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Вот попробовал

Код: sql
1.
select regexp_substr (get_week_list3 (109909, 2017), '[^;]*;')||regexp_substr (get_week_list3 (109909, 2017), '; [&;]*; ') t from dual;



Вроде бы я ему указал первое значение, но затем он выдаёт последующее. Символ & указывает на последнюю запись, но здесь она почему то не работает.
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39423980
Norman94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, исправил, спасибо всем большое!
...
Рейтинг: 0 / 0
Преобразование значений в дату
    #39424010
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Norman94,

На здоровье. И учите матчасть - наличие системных знаний позволяет понять суть проблемы, а не искать методом тыка.
...
Рейтинг: 0 / 0
15 сообщений из 65, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Преобразование значений в дату
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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