При написании и использовании сценариев SQL иногда бывает необходимо указывать переменные и их значения. Команда DEFINE позволяет создавать свои собственные переменные (пользовательские переменные), продолжающие хранить заданные для них значения либо до конца всего данного сеанса SQL*Plus, либо до тех пор, пока не будет применена команда UNDEFINE, которая сбрасывает значения переменных. Ниже приведен пример, показывающий, как применять команды DEFINE и UNDEFINE:
SQL> DEFINE dept = finance SQL> UNDEFINE dept
В этом примере все выглядит довольно просто. На практике команда DEFINE довольно часто применяется для подстановки значений переменных. В таких случаях она обычно используется не с пользовательскими переменными, а с переменными подстановки (substitution variables). Такие переменные определяются за счет добавления к пользовательской переменной символа амперсанда (&), например: &VARIABLE.
В листинге ниже показан простой пример команды DEFINE с переменной подстановки.
SQL> col segment_name for a27 DEFINE owner = '&1' SELECT segment_name,segment_type,extents FROM dba_segments WHERE owner = upper ('&owner') AND extents > 10 AND segment_name NOT LIKE 'TMP%' ORDER BY segment_type,extents desc SQL> @extents.sql Enter value for 1: system SEGMENT_NAME SEGMENT_TYPE EXTENTS HELP_TOPIC_SEQ INDEX 18 PRODUCT_PROFILE TABLE 22 SQL>
В приведенном выше листинге сценарии extents.sql была определена переменная owner, но вместо одного жестко закодированного значения было указано, что эта переменная должна принимать любое подставляемое значение, которое предоставит пользователь. Благодаря этому, сценарий может выполняться для любого пользователя в базе данных. Все, что потребуется — указывать при каждом его запуске другое имя для владельца схемы.