Выбрать главу

(&). В следующем примере показано, как установить символ определения

переменной равным символу «диез» (#), используя команду SET

DEFINE, и как будет выглядеть новый оператор SELECT:

□ SQL> SET DEFINE '#'

SQL> SELECT product_id, name, price

2 FROM products

3 WHERE product_id = #v_product_id;

80 Глава 3

Enter value fo r v _pro du c t_ id: 5

old 3: WHERE product_id = #v_product_id

new 3: WHERE product_id = 5

PRODUCT_ID NAME PRICE

5 Z F i le s 49.99

В следующем примере команда SET DEFINE используется для возврата к

амперсанду:

□ SQL> SET DEFINE

Замена названий таблиц и столбцов с использованием

переменных

Переменные можно использовать для замены не только значений столбцов,

но и названий таблиц и столбцов. Следующий запрос определяет переменные,

в которые можно ввести либо название столбца (v_col) или таблицы

(v_table), либо значение столбца (v_val):

□ SQL> SELECT name, &v_col -

2 FROM &v_table

3 WHERE &v_col = &v_val;

Enter value fo r v_coclass="underline" product_type_id

old 1: SELECT name, &v_col

new 1: SELECT name, product_type_id

Enter value fo r v_table: products

old 2: FROM &v_table

new 2: FROM products

Enter value fo r v_coclass="underline" product_type_id

Enter value fo r v_vaclass="underline" 1

old 3: WHERE &v_col = &v_val

new 3: WHERE product_type_id = 1

NAME PRODUCT_TYPE_ID

Modern Science 1

Chemistry 1

Можно уйти от повторного ввода переменных, если воспользоваться

двумя символами амперсанда (&&):

□ SELECT name, &&v_col

FROM &v_table

WHERE &&v_col = &v_val;

Enter value fo r v_coclass="underline" product_type_id

old 1: SELECT name, &&v_col

new 1: SELECT name, product_type_id

Enter value fo r v_table: products

old 2: FROM &v_table

new 2: FROM products

Enter value fo r v_vaclass="underline" 1

old 3: WHERE &&v_col = &v_val

new 3: WHERE product_type_id = 1

Использование SQL*Plus 81

NAME PRODUCT_TYPE_ID

Modern Science

Chemistry

11

Возможность задавать имена столбцов и таблиц, а также значения

столбцов дает высокую гибкость при написании интерактивных запросов,

которые могут выполнять другие пользователи. Этим пользователям не

требуется писать операторы SQL: можно просто передать им сценарий

и позволить вводить значения переменных для запроса.

Определенные переменные

Переменную можно определить перед ее использованием в операторе

SQL. Такие переменные можно многократно использовать в операторе

SQL. Определенная переменная продолжает существовать, пока она не будет

явно удалена, переопределена или пока пользователь не выйдет из

сеанса SQLTlus.

Для определения переменной используется команда DEFINE. После того

как действия с определенной переменной закончатся, ее можно удалить,

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

Здесь рассказывается также о команде ACCEPT, которая позволяет определить

переменную и указать для нее тип.

Кроме того, можно определять переменные в сценариях SQITPlus

и придавать значения этим переменным при выполнении сценария. Это

дает возможность писать типовые отчеты, которые может выполнять любой

пользователь, даже если он не знаком с SQL (см. ниже раздел «Создание

простых отчетов»).

Определение и распечатка переменных с использованием

команды D E F IN E

Команда DEFINE используется как для определения новых переменных, так

и для распечатки определенных в настоящий момент переменных. В следующем

примере определяется новая переменная по имени v_product_id

и устанавливается ее значение (оно равно 7):

□ SQL> DEFINE v_product_id = 7

С определением переменной можно ознакомиться, если в команде

DEFINE указать имя этой переменной. Следующий пример выводит определение

переменной v_product_id:

□ SQL> DEFINE v_product_id

DEFINE V_PRODUCT_ID = “7" (CHAR)

Обратите внимание, что переменная v_product_id определена как символьная

переменная.

Можно увидеть все переменные сеанса, если задать команду DEFINE без

уточнений:

П SQL> DEFINE

DEFINE _DATE = “ 12-AUG-07" (CHAR)

82 Глава 3

DEFINE .CONNECT.IDENTIFIER = “Oracle11g” (CHAR)

DEFINE _USER = “STORE” (CHAR)

DEFINE .PRIVILEGE = (CHAR)

DEFINE _SQLPLUS_RELEASE = “ 1101000400” (CHAR)

DEFINE .EDITOR = “Notepad” (CHAR)

DEFINE .O.VERSION = “Oracle Database l l g ...” (CHAR)

DEFINE .O.RELEASE = “ 1101000500” (CHAR)

DEFINE _RC = “0” (CHAR)

DEFINE V.PRODUCT.ID =”7" (CHAR)

Определенную переменную можно использовать для указания таких

элементов, как значения столбцов в операторе SQL. В следующем запросе

ранее определенная переменная v .p ro d u c t . id используется для ссылки на

нее во фразе WHERE:

□ SQL> SELECT product.id, name, price

2 FROM products

3 WHERE product.id = &v_product_id;

old 3: WHERE pro d u c t .id = &v_product_id

new 3: WHERE pro d u c t .id = 7

PRODUCT.ID NAME PRICE

7 Space Force 9 13.49

Обратите внимание: вам не предлагалось ввести значение переменной

v .p ro d u c t . id ; это связано с тем, что эта переменная была установлена на 7