Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
05 приложение - SQL Plus - win.doc
Скачиваний:
11
Добавлен:
17.08.2019
Размер:
762.88 Кб
Скачать

Команда print

Команда PRINT имеет следующий синтаксис:

<команда PRINT> ::=

PRI[NT] { <имя переменной>}

Эта команда выдает текущее значение перечисленных связываемых переменных. При вызове без параметров выдаются значения всех связываемых переменных.

Продолжая предыдущий пример:

SQL> print a

SP2-0625: Ошибка печати переменной "a"

SQL> print

DEP

----------

10

DEP2

----------

SP2-0625: Ошибка печати переменной "a"

SQL> set autoprint off

SQL> exec open :a for select ename,sal,comm from emp where deptno=:dep;

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

SQL> print dep a

DEP

----------

10

ENAME SAL COMM

---------- ---------- ----------

CLARK 2450

KING 5000

MILLER 1300

Трассировка операторов

Утилита SQL*Plus позволяет автоматически получать отчет о способе выполнения оператора, выбранном оптимизатором SQL, а также статистическую информацию о выполнении. Этот отчет выдается после успешного выполнения операторов SELECT, INSERT, UPDATE и DELETE. Такой отчет полезен для контроля и настройки производительности этих операторов.

Для управления данным отчетом используется команда SET AUTOTRACE. Эта команда имеет пять опций:

OFF

Отчет не выдается. Это стандартный режим работы SQL*Plus.

ON EXPLAIN

Выдается только выбранный оптимизатором план выполнения оператора.

ON STATISTICS

Выдается только статистическая информация о выполнении оператора.

ON

Выдается план выполнения запроса и статистическая информация о выполнении оператора.

TRACEONLY

Выдается отчет о статистике, но не выдаются результаты выполнения оператора. Используется для трассировки запросов, возвращающих большие объемы данных.

Для использования этой возможности SQL*Plus необходимо создать в схеме пользователя таблицу PLAN_TABLE и получить роль PLUSTRACE (предоставить ее может только DBA). Выполним следующие действия:

SQL> set autotrace on

SP2-0613: Невозможно проверить формат или существование PLAN_TABLE

SP2-0611: Ошибка разблокирования EXPLAIN report

SP2-0618: Невозможно найти Идентификатор Сеанса. Проверьте,

разрешена ли роль PLUSTRACE

SP2-0611: Ошибка разблокирования STATISTICS report

Как видите, по умолчанию эта возможность не поддерживается. Создадим таблицу с помощью сценария $ORACLE_HOME/rdbs/admin/utlxplan.sql:

SQL> @g:\oracle\ora81\rdbms\admin\utlxplan

Таблица создана.

Затем создадим роль PLUSTRACE, дадим ей необходимые привилегии, а затем предоставим ее роли DBA (с помощью сценария $ORACLE_HOME/sqlplus/admin/plustrce.sql):

SQL> connect system/manager as sysdba

Соединено.

SQL> @g:\oracle\ora81\sqlplus\admin\plustrce

SQL>

SQL> drop role plustrace;

drop role plustrace

*

ошибка в строке 1:

ORA-01919: роль 'PLUSTRACE' не существует

SQL> create role plustrace;

Роль создана.

SQL>

SQL> grant select on v_$sesstat to plustrace;

Привилегии предоставлены.

SQL> grant select on v_$statname to plustrace;

Привилегии предоставлены.

SQL> grant select on v_$session to plustrace;

Привилегии предоставлены.

SQL> grant plustrace to dba with admin option;

Привилегии предоставлены.

SQL> set echo off

Теперь предоставим роль PLUSTRACE пользователю, который будет использовать трассировку:

SQL> grant plustrace to scott;

Привилегии предоставлены.

Проверяем, что трассировочный отчет теперь выдается:

SQL> connect scott/tiger

Соединено.

SQL> set autotrace on

SQL> set pagesize 25

SQL> select ename, dname, sal

2 from emp, dept

3 where emp.deptno = dept.deptno;

ENAME DNAME SAL

---------- -------------- ----------

SMITH RESEARCH 800

ALLEN SALES 1600

WARD SALES 1250

JONES RESEARCH 2975

MARTIN SALES 1250

BLAKE SALES 2850

CLARK ACCOUNTING 2450

SCOTT RESEARCH 3000

KING ACCOUNTING 5000

TURNER SALES 1500

ADAMS RESEARCH 1100

JAMES SALES 950

FORD RESEARCH 3000

MILLER ACCOUNTING 1300

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

План выполнения

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=2 Bytes=88)

1 0 HASH JOIN (Cost=3 Card=2 Bytes=88)

2 1 TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=4 Bytes=44)

3 1 TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=41 Bytes=1353)

Статистика

----------------------------------------------------------

62 recursive calls

8 db block gets

6 consistent gets

0 physical reads

0 redo size

1267 bytes sent via SQL*Net to client

424 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

2 sorts (memory)

0 sorts (disk)

14 rows processed

Подробнее использование возможностей трассировки в SQL*Plus рассмотрено в отдельном модуле, посвященном настройке производительности.