Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 25 26 27 28 29 30 31 32 33 [34]
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16897
-2-
Непоправимо приблизили светлые времена

Слишком много вкусного.
Что имел ввиду разработчик, написав "retrun 1"?
retrun := 1; -- прошляпил присваивание?
retrun ; -- пытался обратиться к процедуре retrun, но вместо запяточия вбил единицу?
retrun(1); -- пытался обратиться к процедуре retrun с параметром 1 но прохлопал скобки?
return 1; -- пытался вернуть единичку?
retrun 1; -- пытался выполнить код, написанный под oracle 28zR7?

То, что код двух разных проектов (SQL-engine и PL/SQL engine) может "разбегаться" - скорее ожидаемо чем "непоправимо", так что до светлых времен все-таки остается полагаться на эрзац-ИИ, увы и ах :(
22 окт 18, 18:59    [21711604]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Lary Denis
Member

Откуда:
Сообщений: 15
andrey_anonymous,

"и тут Остапа понесло"
22 окт 18, 19:24    [21711619]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14079
andrey_anonymous
Что имел ввиду разработчик, написав "retrun 1"?
Судя по ошибке, "ИИ" задумался над началом конструкции: что имел ввиду разработчик, написав "with function f". В очередном релизе его "оптимизировали" и, если конструкция не соответствует синтаксической диаграмме plsql-кода, то она обрабатывается уже как with имя as (подзапрос) ...
22 окт 18, 20:14    [21711658]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5149
andrey_anonymous,

Попробую расскрасить для наглядности.
Желтеньким везде внизу Function Declaration.

SQL> create or replace
  2  function f return int as begin retrun(1); end;
  3  /

Warning: Function created with compilation errors.

SQL> sho err
Errors for FUNCTION F:

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/32     PL/SQL: Statement ignored
1/32     PLS-00201: identifier 'RETRUN' must be declared
SQL> with
  2  function f return int as begin retrun(1); end;
  3  select f from dual
  4  /
select f from dual
       *
ERROR at line 3:
ORA-06553: PLS-201: identifier 'RETRUN' must be declared
И Оракл в случае с "(1)" даже умудряется одинаково идентифицировать ошибку и сообщить.

Теперь если посмотреть мой предыдущий пример, можно увидеть что при объявлении функции в запросе вместо ошибки PLS выдается нерелевантное сообщение об ошибке и вообще не PLS.

Чтоб идентифицировать объявление функции в запросе между "with" и ";" не надо никакого ИИ.
Также ИИ не надо, чтоб обрабатывать function declaration по возможности во всех местах одинаково, будь то
1) объявление в запросе
2) объявление в пакете
3) standalone function

Попытки оправдания кривизны отсутствием ИИ могут только запутать людей, которые не понимают сути.
22 окт 18, 20:15    [21711659]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16897
-2-
обрабатывается уже как with имя as (подзапрос) ...

Угу.
Полагаю, поправили/оптимизировали грамматику либо под очередное расширение языка либо под багфикс.
Диагностическое же сообщение в первую голову зависит от контекста, в котором споткнулся парсер.

dbms_photoshop
Попробую расскрасить для наглядности.
SQL> create or replace

1/32     PLS-00201: identifier 'RETRUN' must be declared

SQL> with
ORA-06553: PLS-201: identifier 'RETRUN' must be declared
И Оракл в случае с "(1)" даже умудряется одинаково идентифицировать ошибку и сообщить.

Теперь если посмотреть мой предыдущий пример, можно увидеть что при объявлении функции в запросе вместо ошибки PLS выдается нерелевантное сообщение об ошибке и вообще не PLS.


В случае с (1) как бы тоже не PLS и уж тем более не "-00201", у?
22 окт 18, 20:42    [21711675]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16897
dbms_photoshop
Чтоб идентифицировать объявление функции в запросе между "with" и ";" не надо никакого ИИ.

Каждый мнит себе стратегом видя бой со стороны (с)
Чтобы выделить из текста SQL фрагмент PL/SQL и отдать его парсеру PL/SQL - необходимо на минуточку распарсить PL/SQL хотя бы для определения границы PL/SQL блока.
Нет, это не очень сложно.
Если текст на входе синтаксически корректен.

А вот если текст на входе заведомо содержит синтаксические ошибки (обсуждаем ведь именно это) - задачка выделения PL/SQL блока из текста SQL в общем случае становится довольно замысловатой, особенно если вспомнить, что блок pl/sql может содержать SQL statement-ы, которые могут содержать PL/SQL, которые... :)
Если бы индусы знали, что флейм поднимется в означенном кейсе - отдельно приколотили бы именно его.
Хотя может еще и приколотят.
22 окт 18, 20:58    [21711685]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14079
andrey_anonymous
В случае с (1) как бы тоже не PLS и уж тем более не "-00201", у?
retrun(1) не нарушает синтаксис plsql и блок парсится как plsql, выдавая ожидаемую ошибку pls-201, хоть и обернутую в ora-6553.
22 окт 18, 23:37    [21711736]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5149
andrey_anonymous
dbms_photoshop
Чтоб идентифицировать объявление функции в запросе между "with" и ";" не надо никакого ИИ.

Каждый мнит себе стратегом видя бой со стороны (с)
Вспоминая недавнюю тему, я решил лишь поделиться наблюдением в стиле ДБАшника.
Если кто-то считает подобное разумным и/или обоснованным - это его дело.
andrey_anonymous
Если бы индусы знали, что флейм поднимется в означенном кейсе - отдельно приколотили бы именно его.
А если бы пришло понимание, что Function Declaration оно и в Африке и в Индии и в SQL есть Function Declaration,
то глядишь мир бы стал чуточку лучше.
Рукомендую ознакомиться с тем как задается формальная грамматика.
Потом помедитировать над синтаксическими диаграммами в доке.
andrey_anonymous
В случае с (1) как бы тоже не PLS и уж тем более не "-00201", у?
Андрей, это даже не смешно.
23 окт 18, 00:28    [21711751]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16897
dbms_photoshop
Рукомендую

Ретрун, рукомендую... Кое-кто по ходу просто издевается :)
За "рукомендацию", конечно, спасибо, но я как бы в курсе - потому и знаю, что с диагностикой ошибок компиляции все несколько забавнее чем кажется при простом взгляде на БНФ, ок?
Про "не смешно" - ессно не смешно.
Надо же различать facility, откуда летит exception. Если посмотришь внимательно на исходный и модифицированный примеры - сам дойдешь до простой мысли, что в исходном варианте SQL-парсер просто не смог выделить PL/SQL блок из синтаксически некорректного текста, в модифицированном - смог, поскольку текст был синтаксически корректен... врочем, -2- это уже отметил.
23 окт 18, 00:45    [21711753]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5149
andrey_anonymous,

Спасибо, дискуссия была очень содержательная.
Особенно понравилось про искусственный интеллект.
23 окт 18, 01:23    [21711758]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28467
dbms_photoshop
Если кто-то считает подобное разумным и/или обоснованным - это его дело.
Вот же козёл PL/SQL компилятор, когда не догадывается, что всего лишь одного end* не хватает в нужном месте, а вместо этого выдаёт портянку страшных ошибок.
Какие мы нежные…
23 окт 18, 07:38    [21711825]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14079
Elic
Вот же козёл PL/SQL компилятор
В том-то и дело, что не plsql, а sql-компилятор.
Тогда и в случае неверного sql-синтаксиса plsql-компилятор должен выдавать ошибку со своей точки зрения. То есть, вместо:
begin 
select dummy into x form dual;
end;
/
ORA-00923: FROM keyword not found where expected
нужно выдавать "Встретился символ DUMMY, когда ожидалось := ( ...".
23 окт 18, 07:56    [21711835]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28467
-2-
В том-то и дело, что не plsql, а sql-компилятор.
Я про чистый PL/SQL.
23 окт 18, 08:31    [21711866]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 897
https://news.ycombinator.com/item?id=18442941
22 ноя 18, 14:12    [21741335]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17927
Тогда уж https://habr.com/post/429946/
22 ноя 18, 14:42    [21741402]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 49108
даже не думал, что LAG IGNORE NULLS так медленно работает

CREATE TABLE T1 AS
SELECT CASE WHEN ROWNUM IN (1) OR ROWNUM LIKE '%001' THEN ROWNUM||'='||ROWNUM||'='||ROWNUM||'='||ROWNUM END txt,
       ROWNUM rn
  FROM dual
 connect BY ROWNUM < 20000;
 
 SELECT txt, rn, NVL(txt, LAG(txt IGNORE NULLS) OVER(ORDER BY rn )) txt_new
   FROM T1
 ORDER BY rn, txt_new;
-- 29 сек
2 дек 18, 22:53    [21751624]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 897
Bug 13071556 : QUERY WITH LAG FUNCTION SLOW WHEN USING IGNORE NULLS
Bug 23514030 : LAG+IGNORE NULLS RUNS FOREVER ON THE OUR DATA

Regards
2 дек 18, 23:53    [21751673]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 25 26 27 28 29 30 31 32 33 [34]
Все форумы / Oracle Ответить