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

Откуда: Москва
Сообщений: 17225
-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

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

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

Откуда:
Сообщений: 14559
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

Откуда: Москва
Сообщений: 17225
-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

Откуда: Москва
Сообщений: 17225
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

Откуда:
Сообщений: 14559
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

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

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

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

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

Откуда: Запорожье
Сообщений: 51284
даже не думал, что 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
Сообщений: 908
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]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14559
create table xxxcl(x xmltype) xmltype column x store as securefile clob;
create table xxxbi(x xmltype) xmltype column x store as securefile binary xml;

insert into xxxcl values(xmltype('<x>123</x>'));
insert into xxxbi values(xmltype('<x>123</x>'));
commit;

select s, dump(cast(x as varchar2(100)), 16) d
from (
select 'cl' s, regexp_replace(t.x.getclobval(), '(123)', 'val=\1!',1,0,'n') x from xxxcl t
union all
select 'bi' s, regexp_replace(t.x.getclobval(), '(123)', 'val=\1!',1,0,'n') x from xxxbi t);

S  D                                                                                                   
-- ----------------------------------------------------------------------------------------------------
cl Typ=1 Len=15: 3c,78,3e,76,61,6c,3d,31,32,33,21,3c,2f,78,3e                                          
bi Typ=1 Len=32: 3c,78,3e,0,0,0,76,61,6c,3d,5c,31,21,0,31,32,33,0,0,0,21,0,3c,2f,78,3e,a,0,0,0,0,0     

drop table xxxcl purge;
drop table xxxbi purge;
14 дек 18, 14:44    [21764080]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 908
Апгрейд тестируем, на очередной нежданчик нарвались - может кому интересно будет
+ Bug 28672457 : COLUMN ALIAS IS NOT HONORED IN THE RESULT SET FROM PIPELINE FUNCTION IN 18C
SQL> CREATE OR REPLACE PACKAGE pkg_pipelined_test 
     AS
         CURSOR c_pp IS
         SELECT 'column_value' column_named FROM dual;
         
         TYPE t_pp IS TABLE OF c_pp%rowtype;
         FUNCTION fn_pp RETURN t_pp PIPELINED; 
     END pkg_pipelined_test;
     /
     
Package created.
 
SQL> CREATE OR REPLACE PACKAGE BODY pkg_pipelined_test 
     AS
        FUNCTION fn_pp return t_pp PIPELINED 
        IS
        BEGIN
           FOR r in c_pp 
           LOOP
              PIPE ROW(r); 
           END LOOP;
        END fn_pp; 
     END pkg_pipelined_test;
     /
     
Package body created.
 
SQL> SELECT * FROM TABLE(pkg_pipelined_test.fn_pp());
 
ATTR_1        
------------
column_value
15 янв 19, 18:45    [21786058]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9419
Maxim Demenko
Апгрейд тестируем, на очередной нежданчик нарвались - может кому интересно будет
+ Bug 28672457 : COLUMN ALIAS IS NOT HONORED IN THE RESULT SET FROM PIPELINE FUNCTION IN 18C


А незачем ипользовать pipelined c PL/SQLным типом RECORD и его под капотом системно-генерируемыми типами :) .

SY.
15 янв 19, 19:02    [21786074]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Maxim Demenko
Member

Откуда: Munich, Germany
Сообщений: 908
SY
А незачем ипользовать pipelined c PL/SQLным типом RECORD и его под капотом системно-генерируемыми типами :) .

SY.


Спасибо, почти буквально текст нашего ответа разработчикам ;-) Сказали , код им не нравится , давно собирались переписать. Но нежданчик остается нежданчиком. Щас проверю, как оно на персистентных типах работает (и работает ли все еще ) ;-)
15 янв 19, 19:11    [21786079]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17225
Maxim Demenko
SY
А незачем ипользовать pipelined c PL/SQLным типом RECORD и его под капотом системно-генерируемыми типами :) .
SY.

Спасибо, почти буквально текст нашего ответа разработчикам ;-) Сказали , код им не нравится , давно собирались переписать. Но нежданчик остается нежданчиком. Щас проверю, как оно на персистентных типах работает (и работает ли все еще ) ;-)

Ну начинается...
Если так на каждый баг реагировать - писать не на чем будет.
Сам определение структур через курсор вполне себе уважаю за хорошую сопровождаемость.
16 янв 19, 03:17    [21786350]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 14559
Еще об "ошибках" по следам with function 21710378
with function testf(prm varchar2) return нетип is
begin
   select что-то куда-то из где-то;
   return что-то;
end;
select 'abc' no_testf from dual;

NO_
---
abc
17 янв 19, 15:05    [21787965]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
xtender
Member

Откуда: Мск
Сообщений: 5076
-2-,

+ не понял примера...
SQL> ;
  1  with function testf(prm varchar2) return bla is
  2  begin
  3     select bla blabla from blablabla;
  4     return bla;
  5  end;
  6  select 'abc' no_testf from dual
  7
  8*
SQL> /
with function testf(prm varchar2) return bla is
              *
ERROR at line 1:
ORA-00905: missing keyword
17 янв 19, 16:07    [21788084]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28896
xtender
with function testf(prm varchar2) return bla is
              *
ERROR at line 1:
ORA-00905: missing keyword
Версия-то должна быть надлежащей.
17 янв 19, 16:18    [21788096]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 26 27 28 29 30 31 32 33 [34] 35   вперед  Ctrl
Все форумы / Oracle Ответить