powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DBMS_OUTPUT.GET_STATUS ?
25 сообщений из 36, страница 1 из 2
DBMS_OUTPUT.GET_STATUS ?
    #39640093
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли получить, в сессии сейчас dbms_output.enable или disable?
Делаю добавку в код, который выдает в serveroutput дополнительную информацию, но создает некоторое замедление выполнения. Если output выключен, лучше было бы этот код не выполнять.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640111
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody111, Можно ручками, через контекстные переменные (sys_context)
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640121
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2k, ручками не то. Пользователь может в sqlplus сказать set serveroutput on, и зачем пользователю тут лишние движения ручками...
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640126
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody111Можно ли получить, в сессии сейчас dbms_output.enable или disable? 21356511
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640138
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> set serverout on
SQL> begin
  2    dbms_output.put_line('132');
  3    begin
  4      dbms_output.put(rpad(1,32767));
  5      dbms_output.put(1);
  6      -- OFF
  7    exception
  8      when others then
  9        null; --ON
 10    end;
 11    dbms_output.put_line('465');
 12  end;
 13  /
132
465

PL/SQL procedure successfully completed.

SQL> set serverout off
SQL> /

PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640153
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic, класс, спасибо!
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640155
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody111,

если буффер полностью Ваш (до Вас никто на добавлял строки) то можно через одноместо
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare
 v1 varchar2(100);
 s  number;
begin
 dbms_output.disable;
 dbms_output.put_line('test');
 dbms_output.get_line(v1,s);
 if s=1 then
   null; --disable
 else
   null; --enable
 end if; 
 dbms_output.enable;
 dbms_output.put_line(v1||' '||s);
end;
/




зы
как-то ж dbms_output знает свой статус, наверняка enable/disable возводят пакетный флажок
разврапить пакет и глянуть шо там

.....
stax
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640158
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxто можно через одноместоСтанислав, я показал то место.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640160
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxзы
как-то ж dbms_output знает свой статус, наверняка enable/disable возводят пакетный флажок
разврапить пакет и глянуть шо там

.....
stax
да, тоже такие смутные мысли бродили, надо будет как нибудь...
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640163
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

красивое решения, не видел (страничку не обновлял) и не знал о таком решении
причем об ORU-10028 я знал
думал что он все-таки добавит в буффер rpad(1,32767);
.....
stax
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640175
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxпричем об ORU-10028 я знал
думал что он все-таки добавит в буффер rpad(1,32767);
Код: plsql
1.
2.
3.
4.
5.
6.
      STRLEN := NVL(LENGTHB(A), 0);
      IF ((STRLEN + LINEBUFLEN) > 32767) THEN
        LINEBUFLEN := 0; BUF(PUTIDX) := '';
        RAISE_APPLICATION_ERROR(-20000, 'ORU-10028: line length overflow, ' ||
          'limit of 32767 bytes per line');
      END IF;

...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640186
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicStaxпричем об ORU-10028 я знал
думал что он все-таки добавит в буффер rpad(1,32767);
Код: plsql
1.
2.
3.
4.
5.
6.
      STRLEN := NVL(LENGTHB(A), 0);
      IF ((STRLEN + LINEBUFLEN) > 32767) THEN
        LINEBUFLEN := 0; BUF(PUTIDX) := '';
        RAISE_APPLICATION_ERROR(-20000, 'ORU-10028: line length overflow, ' ||
          'limit of 32767 bytes per line');
      END IF;



спасибо, не подозревал об LINEBUFLEN := 0; BUF(PUTIDX) := '';

исходка? как насчет недокументированного "флажка" для enable/disable, спрятали?

зы
хотя уже не актуально
21387793 красиво работает

.....
stax
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640197
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxхотя уже не актуально
21387793 красиво работаетОсталось выяснить, что за вычисления делаются ради dbms_output, чтобы такая проверка оказалась дешевле холостого вызова put_line.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640277
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

и надо чутку допилить, а то будет неправильно "слетать" при маленьком size

....
stax
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640289
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxи надо чутку допилить, а то будет неправильно "слетать" при маленьком sizeА просто проверить при
Код: plsql
1.
set serverout on size 10000

?
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640424
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicА просто проверить при ?
согласен, Nobody111 не важно из-за чего слетает, важен токо факт

.....
stax
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640541
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxне важно из-за чего слетает,Это твои домыслы. "Слетает" так же.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39640558
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Staxхотя уже не актуально
21387793 красиво работаетОсталось выяснить, что за вычисления делаются ради dbms_output, чтобы такая проверка оказалась дешевле холостого вызова put_line.

добрался до компа
для теста убрал dbms_output.put(1);

Код: plsql
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.
SQL> ed
Wrote file afiedt.buf

  1  begin
  2    dbms_output.enable(null);
  3    dbms_output.put_line('132');
  4     begin
  5       dbms_output.put(rpad(1,32765));
  6  --     dbms_output.put(1);
  7       -- OFF
  8  --    exception
  9  --      when others then
 10  --        null; --ON
 11      end;
 12      dbms_output.put_line('465');
 13* end;
SQL> /
begin
*
ERROR at line 1:
ORA-20000: ORU-10028: line length overflow, limit of 32767 bytes per line
ORA-06512: at "SYS.DBMS_OUTPUT", line 32
ORA-06512: at "SYS.DBMS_OUTPUT", line 91
ORA-06512: at "SYS.DBMS_OUTPUT", line 112
ORA-06512: at line 12


SQL> ed
Wrote file afiedt.buf

  1  begin
  2    dbms_output.enable(2000);
  3    dbms_output.put_line('132');
  4     begin
  5       dbms_output.put(rpad(1,32765));
  6  --     dbms_output.put(1);
  7       -- OFF
  8  --    exception
  9  --      when others then
 10  --        null; --ON
 11      end;
 12      dbms_output.put_line('465');
 13* end;
SQL> /
begin
*
ERROR at line 1:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: at "SYS.DBMS_OUTPUT", line 32
ORA-06512: at "SYS.DBMS_OUTPUT", line 97
ORA-06512: at line 5


SQL>




у меня слетает при 32765 (мож от версии зависит/фича)

для себя сделаю разные коды возврата для ORU-10027 и ORU-10028

зы
повторюсь
для obody111 ето не важно

зыы
интересно
ORU уникальны, или могут пересекатся в зависимости от пакета?

.....
stax
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39641007
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxElicА просто проверить при ?
согласен, Nobody111 не важно из-за чего слетает, важен токо факт

.....[email=]
staxтеоретически не все равно, 5000 за глаза хватит, а практически вероятностью того, что будет зада нsize, можно пренебречь
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39641169
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Elic,

спасибо, сохранил себе в таком виде
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace 
function is_output_enabled return boolean deterministic is
   str_long constant varchar(32767):=rpad('x',32767);
begin
   dbms_output.new_line;
   dbms_output.put(str_long);
   dbms_output.put(str_long);
   return false;
exception 
   when others then 
      return true; 
end;
/



зы. с компилированной функцией гораздо быстрее
Код: plsql
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.
SQL> set serverout on size 10000
SQL> begin
  2     dbms_output.put_line('old data');
  3     if is_output_enabled
  4        then dbms_output.put_line('enabled');
  5        else raise_application_error(-20000,'disabled');
  6     end if;
  7  end;
  8  /
old data
enabled

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
SQL> set serverout off
SQL> begin
  2     dbms_output.put_line('old data');
  3     if is_output_enabled
  4        then dbms_output.put_line('enabled');
  5        else raise_application_error(-20000,'disabled');
  6     end if;
  7  end;
  8  /
begin
*
ERROR at line 1:
ORA-20000: disabled
ORA-06512: at line 5


Elapsed: 00:00:00.01
SQL> declare
  2     function is_output_enabled return boolean deterministic is
  3        str_long constant varchar(32767):=rpad('x',32767);
  4     begin
  5        dbms_output.new_line;
  6        dbms_output.put(str_long);
  7        dbms_output.put(str_long);
  8        return false;
  9     exception
 10        when others then
 11           return true;
 12     end;
 13  begin
 14     dbms_output.put_line('old data');
 15     if is_output_enabled
 16        then dbms_output.put_line('enabled');
 17        else raise_application_error(-20000,'disabled');
 18     end if;
 19  end;
 20  /
declare
*
ERROR at line 1:
ORA-20000: disabled
ORA-06512: at line 17


Elapsed: 00:00:03.08

...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39641191
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
Код: plsql
1.
   dbms_output.new_line;

Искажает буфер.
xtender
Код: plsql
1.
2.
SQL> declare
  2     function is_output_enabled return boolean deterministic is

Во-первых, не понимаю, зачем это вообще нужно.
Во-вторых, версионно:
Код: plsql
1.
2.
3.
4.
5.
   function is_output_enabled return boolean deterministic is
            *
ERROR at line 2:
ORA-06550: line 2, column 13:
PLS-00712: illegal option for subprogram IS_OUTPUT_ENABLED


xtenderзы. с компилированной функцией гораздо быстрее
Код: plsql
1.
Elapsed: 00:00:03.08

Тебе показалось. Неужели чудовищная неправдоподобность величины не вызвала сомнений?
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39641206
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВо-вторых, версионно:
Код: plsql
1.
2.
3.
4.
5.
   function is_output_enabled return boolean deterministic is
            *
ERROR at line 2:
ORA-06550: line 2, column 13:
PLS-00712: illegal option for subprogram IS_OUTPUT_ENABLED




Ну, 32767 - тоже версионно. Когда-то предел длины строки здесь был 256.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39641216
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, 255, вроде бы в 9.2 еще.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39641224
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody111Когда-то предел длины строки здесь был 256.Во-первых, совсем не здесь, а во-вторых, не 256.
...
Рейтинг: 0 / 0
DBMS_OUTPUT.GET_STATUS ?
    #39641329
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ElicИскажает буфер.это лучше, чем потерять put...

ElicВо-вторых, версионно:это не то "версионно", из-за которого стоило бы переживать...

ElicТебе показалось.отнюдь... я прекрасно знаю где, когда и куда это время уходит
Код: plsql
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.
SQL> select * from v$version;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0
PL/SQL Release 12.2.0.1.0 - Production                                                    0
CORE    12.2.0.1.0      Production                                                                0
TNS for Linux: Version 12.2.0.1.0 - Production                                            0
NLSRTL Version 12.2.0.1.0 - Production                                                    0

Elapsed: 00:00:00.30

SQL> @plans/flush_sql.sql
Enter value for sql_id: c8wpgq87py4ax

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.19
SQL> @tests/output
declare
*
ERROR at line 1:
ORA-20000: disabled
ORA-06512: at line 17


Elapsed: 00:00:03.13
SQL> @tests/output
declare
*
ERROR at line 1:
ORA-20000: disabled
ORA-06512: at line 17


Elapsed: 00:00:00.29
SQL> @plans/flush_sql.sql
Enter value for sql_id: c8wpgq87py4ax

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.14
SQL> @tests/output
declare
*
ERROR at line 1:
ORA-20000: disabled
ORA-06512: at line 17


Elapsed: 00:00:03.17

...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DBMS_OUTPUT.GET_STATUS ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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