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

Откуда: Ukraine,Lviv
Сообщений: 2478
Кобанчег

PS. preceding and following exclude current row тоже без особых затруднений реализуется текущими средствами.


устал я наверное сегодня (алиас не понял a tt (i) ),
что-то простое не приходит на ум для
max(x) preceding 5 and following 5 без текущей

как без особых затруднений реализуется ?

.....
stax
20 фев 20, 16:09    [22083949]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
-2-
Синтаксические диаграммы обсуждаемого предмета есть по ссылке в сообщении 22083335.
Искренне приношу извинения.
Как ни старался не нашел там слов named window.
-2-
Кому и lag-подзапрос невеста.
Суть в том, что выкрутиться можно.
А workaround для groups between ты не придумаешь в рамках аналитических функций как ни старайся.
-2-
Исключение текущей строки из аналитики на форуме возникало не раз. В том числе, поднимался вопрос эффективности окон с разным 1 preceding/current row против одинаковых окон и вычитания из суммы.
Понятно, только никто не смог привести ссылку.
А я ничего интересного не нашел по словам "preceding + current + row + текущая" или "preceding + current + row + текущей".
Хотя точнее интересное попалось, но из другой оперы.
20 фев 20, 20:07    [22084164]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
Stax
что-то простое не приходит на ум для
max(x) preceding 5 and following 5 без текущей

как без особых затруднений реализуется ?
greatest(max по порядку до, max после)
20 фев 20, 20:09    [22084166]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2478
Кобанчег
Stax
что-то простое не приходит на ум для
max(x) preceding 5 and following 5 без текущей

как без особых затруднений реализуется ?
greatest(max по порядку до, max после)

ага, а тепер допопилить для первой/последней строки, для окна в одну строку, у меня наворот получается нехилый

ps
сделали б еще возможность ссылаться на поля текущей, тож бы пригодилось

.....
stax
21 фев 20, 10:46    [22084389]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
Stax
ага, а тепер допопилить для первой/последней строки, для окна в одну строку, у меня наворот получается нехилый
Сколько строк покадает в окно неважно. А так надо накрутить nvl и всё будет тип топ. Да, букв многовато.
Stax
сделали б еще возможность ссылаться на поля текущей, тож бы пригодилось
Это да, возникала необходимость пару-тройку раз.
21 фев 20, 23:47    [22084972]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2478
Кобанчег
Сколько строк покадает в окно неважно. А так надо накрутить nvl и всё будет тип топ. Да, букв многовато.

если накрутить NVL то к-во строк (одна строка в партиции) имхо станет важно

.....
stax
24 фев 20, 10:31    [22085755]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
Stax
если накрутить NVL то к-во строк (одна строка в партиции) имхо станет важно
Чтоб не было имховых беспокойств достаточно привести контрпример.
Если мы по прежнему обсуждаем гипотетическое максимальное кроме текущего:
+ greatest(nvl(pre,post),nvl(post,pre))
with t(part,value) as
(
select 1, 1.9 from dual
union all select 1, 1.8 from dual
union all select 1, 1.99 from dual
union all select 1, 1.99 from dual
union all select 1, 1.7 from dual
--
union all select 2, 1.1 from dual
union all select 2, 1.55 from dual
union all select 2, 1.3 from dual
--
union all select 3, 1.1 from dual
union all select 3, 1.11 from dual
--
union all select 4, 1.5 from dual
--
union all select 5, 1.13 from dual
union all select 5, 1.13 from dual
--
union all select 6, 1.11 from dual
union all select 6, 1.11 from dual
union all select 6, 1.1 from dual
)
select t.*,
       greatest(
          nvl(max(value) over (partition by part order by value range between unbounded preceding and 1e-38 preceding),
              max(value) over (partition by part order by value range between 1e-38 following and unbounded following)),
          nvl(max(value) over (partition by part order by value range between 1e-38 following and unbounded following),
              max(value) over (partition by part order by value range between unbounded preceding and 1e-38 preceding))) m
  from t;

      PART      VALUE          M
---------- ---------- ----------
         1        1.7       1.99
         1        1.8       1.99
         1        1.9       1.99
         1       1.99        1.9
         1       1.99        1.9
         2        1.1       1.55
         2        1.3       1.55
         2       1.55        1.3
         3        1.1       1.11
         3       1.11        1.1
         4        1.5
         5       1.13
         5       1.13
         6        1.1       1.11
         6       1.11        1.1
         6       1.11        1.1

16 rows selected.
24 фев 20, 18:00    [22085954]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2478
Кобанчег,

спасибо, я не так nvl рисовал
и рассматривал случай preceding 5 and following 5

на Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

31 from t;
ERROR:
ORA-03113: end-of-file on communication channel
Process ID: 31608
Session ID: 277 Serial number: 11807

зи
мож комусь и пригодится, не все ж на 20-ку перешли


.....
stax
24 фев 20, 18:29    [22085968]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
Stax
рассматривал случай preceding 5 and following 5
Если интересует произвольный сдвиг - можно предварительно проранжировать (и greatest тоже не нужен если подумать).
tt as (select t.*, dense_rank() over (partition by part order by value) rnk from t)
select t.*,
       nvl(max(value) over (partition by part order by rnk range between 1 following and unbounded following),
           max(value) over (partition by part order by rnk range between unbounded preceding and 1 preceding)) mm
  from tt t;
Это работает и на 11-й версии.
Stax
11.2.0.3.0
На 11.2.0.4 оказывается тоже.
24 фев 20, 19:22    [22086000]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
Кобанчег
Stax
11.2.0.3.0
На 11.2.0.4 оказывается тоже.
Баг возникает только с with, если предварительно создать таблицу, то проблемы нет.
Но также имеет значение точность.
При e-12 все ОК и при with, если увеличивать точность, то будут самые разнообразные эффекты с
- wrong results на любой вкус
- ORA-00600
- ORA-03113
- влияние наличия/отсутсвия одних колонок на другие итд

Всё в лучших традициях Оракла.
+
with t(part,value) as
(
select 1, 1.9 from dual
union all select 1, 1.8 from dual
union all select 1, 1.99 from dual
union all select 1, 1.99 from dual
union all select 1, 1.7 from dual
--
union all select 2, 1.1 from dual
union all select 2, 1.55 from dual
union all select 2, 1.3 from dual
--
union all select 3, 1.1 from dual
union all select 3, 1.11 from dual
--
union all select 4, 1.5 from dual
--
union all select 5, 1.13 from dual
union all select 5, 1.13 from dual
--
union all select 6, 1.11 from dual
union all select 6, 1.11 from dual
union all select 6, 1.1 from dual
)
, tt as (select t.*, dense_rank() over (partition by part order by value) rnk from t)
select t.*,
       nvl(max(value) over (partition by part order by rnk range between 1 following and unbounded following),
           max(value) over (partition by part order by rnk range between unbounded preceding and 1 preceding)) m,
       nvl(max(value) over (partition by part order by value range between 1e-12 following and unbounded following),
           max(value) over (partition by part order by value range between unbounded preceding and 1e-12 preceding)) mm
  from tt t;
24 фев 20, 20:14    [22086024]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18069
Кобанчег
Баг возникает только с with, если предварительно создать таблицу, то проблемы нет.

Я, видимо, довольно скоро приобрету устойчивую привычку явно кастовать значения в with - последнее время стал часто налетать на маловразумительные баги, связанные с transient-типами.
25 фев 20, 19:05    [22086759]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
-2-
Очередная грабля со store as binary xml.
create table t0 (
  x1 xmltype,
  x2 xmltype
) xmltype column x1 store as clob
  xmltype column x2 store as securefile binary xml;

insert into t0 values (xmltype('<x1>ЭтоТекстВЮТФ-8</x1>'), xmltype('<x2>ЭтоТекстВЮТФ-8</x2>'));
commit;

declare
  c1 clob;
  c2 clob;
  am number;
  bu varchar2(32767 byte);
begin
  select t.x1.getclobval(), t.x2.getclobval() into c1, c2
    from t0 t;
  am := 5; dbms_lob.read(c1, am, 6, bu); -- читает символами
  dbms_output.put_line('['||bu||']'||utl_raw.cast_to_raw(bu));
  am := 5; dbms_lob.read(c2, am, 6, bu); -- читает байтами
  dbms_output.put_line('['||bu||']'||utl_raw.cast_to_raw(bu));
end;
/

[тоТек]D182D0BED0A2D0B5D0BA
[&#65533;то]ADD182D0BE
11 апр 20, 02:13    [22114485]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
4-байтные utf-8 символы не дружат с клоб-функциями. Где-то оракл косячит с понятием символа в клобовском utf-16.
with t(s, c) as (select '['||chr(4036994214)||']', to_clob('['||chr(4036994214)||']') from dual)
select length(s) lens, length(c) lenc from t;

      LENS       LENC
---------- ----------
         3          4
Аналогично и другие функции, включая dbms_lob.
11 апр 20, 22:21    [22114794]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
-2-
Где-то оракл косячит с понятием символа в клобовском utf-16.
Нет, не глючит, это by design, поскольку клоб всегда в кодировке al16utf16
Codepoint Semantics
Codepoint semantics of the INSTR, SUBSTR, LENGTH, and LIKE functions, described in Table 7-1, differ depending on the data type of the argument passed to the function. These functions use different codepoint semantics depending on whether the argument is a VARCHAR2 or a CLOB type as follows:
  • When the argument is a CLOB, UCS2 codepoint semantics are used for all character sets.
  • When the argument is a character type, such as VARCHAR2, the default codepoint semantics are used for the given character set:
                * UCS2 codepoint semantics are used for AL16UTF16 and UTF8 character sets.
                * UCS4 codepoint semantics are used for all other character sets, such as AL32UTF8.
  • If you are storing character data in a CLOB or NCLOB, then note that the amount and offset parameters for any APIs that read or write data to the CLOB or NCLOB are specified in UCS2 codepoints. In some character sets, a full character consists one or more UCS2 codepoints called a surrogate pair. In this scenario, you must ensure that the amount or offset you specify does not cut into a full character. This avoids reading or writing a partial character.
  • Oracle Database helps to detect half surrogate pair on read or write boundaries in case of SQL functions and in case of read/write through LOB APIs. The behavior is as follows:
                * If the starting offset is in the middle of a surrogate pair, an error is raised for both read and write operations.
                * If the read amount reads only a partial character, increment or decrement the amount by 1 to read complete characters.
Note:
The output amount may vary from the input amount.

                * If the write amount overwrites a partial character, an error is raised to prevent the corruption of existing data caused by overwriting of a partial character in the destination CLOB or NCLOB.
Note:
This check only applies to the existing data in the CLOB or NCLOB. You must make sure that the incoming buffer for the write operation starts and ends in complete characters.
11 апр 20, 23:09    [22114811]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
Вопрос специалистам по биндам.

Интересует трюк по захвату биндов по конкретному sql_id.

Можно включить sql monitor для конкретного sql_id но он насобирает уйму данных которые не нужны.
Можно включить аудит по конкретной таблице "audit select on <tbl>", но он будет писать бинды для всех запросов где есть та таблица.
sql trace пишет еще больше "мусора".

По сути интересует sid, sql_id, sql_exec_id, binds.

Может я упустил какую-то фичу? (пусть недокументированную)
22 апр 20, 16:37    [22120862]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
IgorSm
Member

Откуда:
Сообщений: 85
https://docs.oracle.com/database/121/REFRN/GUID-D353F4BE-5943-4F5B-A99B-BC9505E9579C.htm
V$SQL_BIND_CAPTURE не подойдёт?
22 апр 20, 16:42    [22120866]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
xtender
Member

Откуда: Мск
Сообщений: 5492
Кобанчег,

Обычный sql trace на конкретный sqlid, но с параметром - только бинды. У Подера где-то есть хорошая памятка
22 апр 20, 16:44    [22120868]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
xtender
Кобанчег,

Обычный sql trace на конкретный sqlid, но с параметром - только бинды. У Подера где-то есть хорошая памятка
Так я ж написал что оно генерит много ненужного.
Что-то типа такого
alter system set events 'sql_trace[sql: ...] level=4'
все равно дампит EXEC/STAT/FETCH/CLOSE и прочую ерунду.
Да и надо натравливать external table на файл, лучше уж аудит.

Удивляет просто почему не добавили FGA по sql_id.
22 апр 20, 17:08    [22120886]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
xtender
Member

Откуда: Мск
Сообщений: 5492
Кобанчег
EXEC/STAT/FETCH/CLOSE
в принципе от практически всего можно избавиться:
alter session set events 'sql_trace[SQL: 10z6ajzk4tt2c] {callstack: fprefix opiodr, fname opiexe, maxdepth 7} plan_stat=never,wait=false,bind=true';

*** 2020-04-23T10:54:11.310410+00:00 (PDB1(3))
BINDS #140023513928880:

 Bind#0
  oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00
  oacflg=03 fl2=1000000 frm=01 csi=873 siz=32 off=0
  kxsbbbfp=7f59c3ce7838  bln=32  avl=01  flg=05
  value="4"
EXEC #140023513928880:c=153,e=154,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=272002086,tim=295370666725

в принципе думаю, можно и от exec избавиться, выбрав подходящую функцию и параметры.
23 апр 20, 14:25    [22121447]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
grok
Member

Откуда:
Сообщений: 1683
вот почему ???

create type test_t as object(
    v1 varchar2(800)    
  , v2 varchar2(800)
)


with a as (
  select test_t('1','2') as ttt
  from dual
)
select a.ttt.v1
from a


так не работает

но

with a as (
  select test_t('1','2') as ttt
  from dual
)
select x.ttt.v1
from a x


так работает

версия 12.2
25 июн 20, 18:17    [22157396]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Elic
Member [заблокирован]

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29861
grok
вот почему ???
Курилка тут не при чём. RTFM
25 июн 20, 18:37    [22157405]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54139
привык в шарпах к быстрому и удобному "форматированию"
Info.Text = $"{e.RowIndex+1} / {dgv.Rows.Count}";


и понял - в плскл ну как минимум не помешало бы

Сообщение было отредактировано: 1 июл 20, 16:10
1 июл 20, 16:12    [22160242]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8066
andreymx
привык в шарпах к быстрому и удобному "форматированию"
Info.Text = $"{e.RowIndex+1} / {dgv.Rows.Count}";

и понял - в плскл ну как минимум не помешало бы

А теперь объясните, пожалуйста, то же самое, но для тех, кто понятия не имеет, что такое "шарпы".
2 июл 20, 03:28    [22160496]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
xtender
Member

Откуда: Мск
Сообщений: 5492
andreymx,

Странная отсылка именно к шарпу, ведь это много где есть и называется string interpolation
2 июл 20, 05:25    [22160516]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
xtender
Member

Откуда: Мск
Сообщений: 5492
Удобно, конечно, хотя в plsql врядли появится, но тут хотя бы аналог sprintf есть - utl_lms. Format_message
2 июл 20, 05:27    [22160518]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 30 31 32 33 34 35 36 37 [38] 39   вперед  Ctrl
Все форумы / Oracle Ответить