Наличие поясняющего текста (комментариев) является важным признаком хорошей программы. В данной книге приводится множество советов, поясняющих, как сделать программы самодокументируемыми за счет использования продуманных соглашений об именах и модульного подхода. Однако для понимания сложного программного кода этого еще не достаточно. PL/SQL предлагает разработчикам две разновидности комментариев: однострочные и многострочные.
Однострочные комментарии
Однострочные комментарии начинаются с двух дефисов (--), между которыми не может быть пробелов или каких-либо других символов. Весь текст после двух дефисов и до конца физической строки рассматривается как комментарий и игнорируется компилятором. Если два дефиса стоят в начале строки, то комментарием считается вся строка.
Запомните: два дефиса помечают как комментарий только остаток физической строки, а не логической команды PL/SQL. В следующей команде IF однострочный комментарий поясняет логику условного выражения:
IF salary < min_salary (2003) -- Функция возвращает минимальную годовую зарплату. THEN salary := salary + salary*.25; END IF;
Многострочные комментарии
Если однострочные комментарии удобны для краткого описания фрагментов кода или временного исключения строки программы из обработки, то многострочные позволяют включать в программу длинный сопроводительный текст или пояснения.
Многострочный комментарий размещается между начальным (/*) и конечным (*/) ограничителями. PL/SQL рассматривает весь текст между этими двумя парами символов как часть комментария и игнорируется компилятором.
В следующем примере многострочный комментарий располагается в разделе заголовка процедуры. Столбик из вертикальных черт у левого края помогает зрительно выделить комментарий в программе:
PROCEDURE calc_revenue (company_id IN NUMBER) IS /* | Имя программы: calc_revenue | Автор: Стивен Фейерштейн | История изменений: | 10-06-2009 — введение новых формул | 23-10-2008 — создание программы |*/ BEGIN ... END;
С помощью многострочных комментариев также можно отменить выполнение части программного кода на время тестирования. В следующем примере дополнительные условия в операторе EXIT игнорируются для направленного тестирования функции a_delimiter:
EXIT WHEN a_delimiter (next_char) /* OR (was_a_delimiter AND NOT a_delimiter (next_char)) */ ;