Друк значення змінної у SQL Developer


102

Я хотів надрукувати значення певної змінної, яка знаходиться всередині анонімного блоку. Я використовую розробник SQL SQL. Я спробував використовувати dbms_output.put_line. Але це не працює. Код, який я використовую, показаний нижче.

SET SERVEROUTPUT ON

DECLARE

  CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
  V_ALL_COLS VARCHAR2(500);

  CURSOR CURSOR_TABLE
    IS
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE'
    AND OBJECT_NAME LIKE 'tb_prm_%';

  CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
    IS
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLS
    WHERE TABLE_NAME = V_TABLE_NAME;

BEGIN

  OPEN CURSOR_TABLE;

  LOOP
    FETCH CURSOR_TABLE INTO CTABLE;
    EXIT WHEN CURSOR_TABLE%NOTFOUND;

    OPEN CURSOR_COLUMNS (CTABLE);

    V_ALL_COLS := NULL;

    LOOP
      FETCH CURSOR_COLUMNS INTO CCOLUMN;
      V_ALL_COLS := V_ALL_COLS || CCOLUMN;
      IF CURSOR_COLUMNS%FOUND THEN
        V_ALL_COLS := V_ALL_COLS || ', ';
      ELSE
        EXIT;
      END IF;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);

  END LOOP;
  CLOSE CURSOR_TABLE;

END;

І я отримую вихід лише як anonymous block completed.


висновок видається в кінці / завершенні програми, таким чином він працює. Ви не можете промити, щоб відобразити під час роботи. Загляньте в таблиці журналів (автономна транзакція), щоб побачити, що відбувається під час роботи програми
tbone

Чому б не використати вбудований налагоджувач і не перейти через ваш блок. Він показує стан усіх змінних.
Вовк

5
УВІМКНЕНО СЕРВЕРНОГО ВИКЛ --додайте напівколонку, виберіть ВСЕ та запустіть розробника, для мене це працює добре,
Praveenkumar_V

Відповіді:


203

Потрібно ввімкнути dbms_output. У розробнику Oracle SQL:

  1. Показати вікно виводу СУБД (Перегляд-> Вихід СУБД).
  2. Натисніть кнопку "+" у верхній частині вікна виводу Dbms, а потім виберіть відкрите підключення до бази даних у діалоговому вікні, яке відкриється.

У SQL * Plus:

 SET SERVEROUTPUT ON

У версії 1.5.5 у мене, здається, немає такої опції під View. Там є з'єднання, файли, звіти ... Рядок стану, Панелі інструментів, Оновлення, але вихід СУБД немає. Багато речей під налаштуваннями, але я все ще не бачу варіанту для виводу.
ruffin

1
@ruffin: v1.5.5 3 роки. Я використовую v3.0, а поточна версія здається v3.1.
Klas Lindbäck

/ киває: Ми затрималися на 1.5.5 - якби у вас була відповідь під рукою, я б її прийняв, але nps інакше. Дякую!
ruffin

Я встановив опцію "SET SERVEROUTPUT ON" у першому рядку файла sql.
Саміх А

Дуже дякую!
Amazigh.Ca

18

Здається, розробник SQL видає текст DBMS_OUTPUT лише тоді, коли ви явно увімкнули вікно вікна DBMS_OUTPUT.

Перейдіть до (Меню) VIEW -> Dbms_output, щоб викликати область.

Клацніть на знаку Green Plus, щоб увімкнути вихід для вашого з'єднання, а потім запустіть код.

EDIT: Не забудьте встановити розмір буфера відповідно до обсягу виходу, який ви очікуєте.


6

Перш за все зробіть вихід сервера

  1. SET SERVEROUTPUT on тоді

  2. Перейдіть у вікно виводу СУБД (Перегляд-> Вихід СУБД)

  3. потім натисніть Ctrl+ Nдля підключення сервера


3

Є 2 варіанти:

set serveroutput on format wrapped;

або

Відкрийте меню "view" та натисніть на "dbms output". Ви повинні отримати вікно виводу dbms у нижній частині робочого аркуша. Потім потрібно додати з'єднання (чомусь це не робиться автоматично).


1

1) Перейдіть до меню перегляду.
2) Виберіть пункт меню DBMS_OUTPUT.
3) Натисніть Ctrl+ Nта виберіть редактор з'єднань.
4) Виконайте команду SET SERVEROUTPUT ON.
5) Потім виконайте свій PL / SQL скрипт.

введіть тут опис зображення введіть тут опис зображення


0
DECLARE

  CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
  V_ALL_COLS VARCHAR2(5000);

  CURSOR CURSOR_TABLE
    IS
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE'
    AND OBJECT_NAME LIKE 'STG%';

  CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
    IS
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLS
    WHERE TABLE_NAME = V_TABLE_NAME;

BEGIN

  OPEN CURSOR_TABLE;
  LOOP
    FETCH CURSOR_TABLE INTO CTABLE;

    OPEN CURSOR_COLUMNS (CTABLE);
    V_ALL_COLS := NULL;
    LOOP

      FETCH CURSOR_COLUMNS INTO CCOLUMN;
      V_ALL_COLS := V_ALL_COLS || CCOLUMN;
      IF CURSOR_COLUMNS%FOUND THEN
        V_ALL_COLS := V_ALL_COLS || ', ';
      ELSE
        EXIT;
      END IF;
    END LOOP;
   close CURSOR_COLUMNS ;
    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);
    EXIT WHEN CURSOR_TABLE%NOTFOUND;
  END LOOP;`enter code here`
  CLOSE CURSOR_TABLE;

END;

Я додав Закрити другий курсор. Це працює і отримує вихід також ...



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.