Практически любой написанный вами блок PL/SQL будет определять данные и выполнять с ними те или иные операции. Программные данные представляют собой структуры, которые существуют только в рамках сеанса PL/SQL (а физически — находятся в рамках глобальной области программ (PGA, Program Global Area)) и не хранятся в базе данных. К программным данным относятся:
- Переменные и константы — значения переменных могут изменяться во время выполнения программы, а значения констант статичны, то есть устанавливаются при объявлении и в дальнейшем не изменяются.
- Скалярные и составные данные — скалярные данные состоят из одного значения (например, числа или строки), а составные данные состоят из нескольких значений (как, например, запись, коллекция или экземпляр объектного типа).
- Контейнеры — могут содержать информацию, полученную из базы данных или иного источника.
Прежде чем работать с программными данными в коде PL/SQL, необходимо объявить структуры данных с указанием имен и типов данных.
В этой статье мы расскажем о том, как объявляются данные в программе, и опишем правила, которым нужно следовать при выборе имен для этих данных. Также будет приведена краткая сводка всех типов данных, поддерживаемых в PL/SQL, и рассмотрена концепция преобразования типов. Статья завершается рекомендациями о том, как лучше работать с программными данными. Конкретные типы данных будут подробно описаны мною в других заметках моего блога.
Присваивание имен
Чтобы использовать переменную или константу, ее необходимо сначала объявить, присвоив ей имя и определив тип. Ниже перечислены основные правила выбора имен в PL/ SQL (они касаются также имен объектов базы данных, например таблиц или столбцов):
- длина имени не должна превышать 30 символов;
- имя должно начинаться с буквы и может состоять из букв, цифр, а также символов
«$», «#» и «_»;
- имена нечувствительны к регистру символов (если только они не заключены в двойные кавычки).
Согласно этим правилам допустимыми являются имена:
l_total_count first_12_years total_#_of_trees salary_in_$
Следующие два имени допустимы, однако они считаются в PL/SQL идентичными из-за нечувствительности языка к регистру символов:
ExpertsExchange ExpertSexChange
Следующие имена недопустимы по указанным причинам:
1st_account -- Начинается с цифры, а не буквы favorite_ice_cream_flavors_that_dont_contain_nuts -- Слишком длинное имя email_address@business_loc -- Имя содержит недопустимый символ @
У этих правил есть несколько исключений. Если имя в объявлении заключить в двойные кавычки, соблюдение этих правил не обязательно, кроме одного: длина имени не должна превышать 30 символов. Например, допустимыми являются следующие объявления:
DECLARE "truly_lower_case" INTEGER; " " DATE; -- Да, имя из пяти пробелов! "123_go!" VARCHAR2(10); BEGIN "123_go!" := 'Steven'; END;
Когда эти имена указываются в исполняемом разделе, они всегда должны заключаться в двойные кавычки, иначе код не будет компилироваться.
Зачем нужны имена в двойных кавычках? В программах PL/SQL они не имеют особого смысла, но при создании объектов баз данных это позволяет сохранить в идентификаторах исходный регистр символов (например, если в программе создается таблица «docs», то она будет называться именно docs, а не DOCS). Однако в любых других случаях лучше избегать применения двойных кавычек в программах PL/SQL.
Другое исключение из правил имен относится к именам объектов Java, длина которых может достигать 4000 символов.
Выбирая имена для переменных и констант, придерживайтесь следующих рекомендаций.
- Убедитесь в том, что имя соответствует назначению объекта и по нему можно быстро определить это назначение. Попытайтесь сформулировать, что представляет собой значение переменной; это поможет выбрать для нее более точное имя. Например, если переменная представляет «количество обращений по поводу еле теплого кофе», подходящим именем этой переменной может быть
total_calls_on_cold_coffee
, илиtot_cold_calls
, если вас раздражают имена переменных из пяти слов. Напротив, именаtotcoffee
илиt_#_calls_lwcoff
плохи — вряд ли читатель по имени переменной поймет, какие данные в ней хранятся. - Выработайте единые соглашения об именовании объектов и следуйте им. Соглашения обычно предполагают использование префиксов и суффиксов, описывающих тип и назначение переменных. Например, имена всех локальных переменных могут начинаться с суффикса «
l_
», а имена глобальных переменных, определяемых в пакетах, — с префиксом «g_
». Записям назначается суффикс «_rt
» и т. д. Полный набор правил назначения имен можно загрузить с примерами кода книги «Oracle PL/SQL Best Practices».