Шрифт:
Скрипт может также содержать комментарии в двух вариантах.
Блок комментариев в скриптах DDL использует соглашения языка С:
/* Этот комментарий распространяется на множество строк в скрипте */
Блок комментариев может появиться в той же строке, что и оператор SQL или команда isql, и может быть произвольной длины. Он начинается символами /* и заканчивается символами */.
Комментарий стиля /*...*/ также может быть встроен внутрь оператора как линейный комментарий:
CREATE TABLE USERS1 (
USER_NAME VARCHAR( 128 )
/* security user name */
, GROUP_NAME VARCHAR(128)
/* not used on Windows */
, PASSWD VARCHAR( 32 )
/* will be stored encrypted */
, FIRST_NAME VARCHAR(96) /* Defaulted */
, MIDDLE_NAME VARCHAR( 96 ) /* Defaulted */
, LAST_NAME VARCHAR( 96 ) /* Defaulted */
, EULL_NAME VARCHAR( 290 ) /* Computed */
) ;
В скриптах Firebird вы можете использовать альтернативное соглашение по комментированию одной строки - двойной минус:
– - комментарий
В релизе 1.0.x этот стиль комментария не может быть использован для линейного комментария или для "закомментирования" части строки.
В релизе 1.5 и выше соглашение по комментированию -- может быть использовано в любом месте строки для "комментирования" всего, начиная с маркера до конца текущей строки, например:
CREATE TABLE MET_REPORT (
ID BIGINT NOT NULL, -- VARCHAR(40), невидим
WEATHER_CONDITIONS
BLOB SUB_TYPE TEXT,
LAST_REPORT TIMESTAMP) ;
Команды isql SET AUTODDL, SET SQL DIALECT, SET TERM и INPUT являются допустимыми операторами в скриптах Firebird - подробности об этих командах см. в главе 37.
Все операторы, которые выполняются в скрипте, должны оканчиваться символом терминатора. Символ по умолчанию - точка с запятой (;).
Символ терминатора по умолчанию может быть изменен для всех операторов за исключением операторов языка процедур (PSQL) при использовании в скрипте команды SET TERM [33] .
PSQL не допускает никаких терминаторов за исключением точки с запятой (;). Такое ограничение необходимо, потому что CREATE PROCEDURE, RECREATE PROCEDURE, ALTER PROCEDURE, CREATE TRIGGER и ALTER TRIGGER вместе с их операторами PSQL являются сложными операторами с их собственными правилами. Компилятору нужно видеть точку с запятой для различения каждого оператора PSQL.
33
Команда SET TERM не является SQL-оператором, понимаемым Firebird. Это команда утилиты 1SQL, позволяющая задать индикатор окончания оператора DDL. SET TERM используется только там, где инструмент разработчика может выполнить несколько команд DDL и DML в одном скрипте.
– Прим. науч. ред.
Следовательно, в скриптах необходимо переопределять используемый в командах скрипта терминатор перед началом операторов PSQL для хранимых процедур и триггеров. После последнего оператора END, когда завершается исходный текст процедуры, следует восстановить значение терминатора по умолчанию, используя другой оператор SET TERM. Пример:
CREATE GENERATOR GEN_MY_GEN ;
SET TERM ^^;
CREATE TRIGGER BI_TABLEA_0 FOR TABLEA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.PK IS NOT NULL) THEN
NEW.PK = GEN_ID(GEN_MY_GEH, 1);
END ^^
SET TERM ; ^^
. . .
Любая строка может быть использована в качестве альтернативного терминатора, например:
SET TERM @ ! #;
CREATE PROCEDURE...
AS
BEGIN
. . . ;
. . . ;
END @!#
SET TERM ;@!#
/**/
COMMIT;
/**/
SET TERM +;
CREATE PROCEDURE...
AS
BEGIN
. . .;
. . . ;
END +
SET TERM ; +
/**/
COMMIT;
Оператор SQL без сообщений не выполняется, если его текст следует за символом терминатора в той же строке. Пробелы и комментарии могут следовать за терминатором, но не другие операторы.
Например, в следующей последовательности оператор COMMIT не будет выполняться:
ALTER TABLE ATABLE ADD F2 INTEGER; COMMIT;
в то время как последовательность далее правильная:
ALTER TABLE ATABLE ADD F2 INTEGER; /* счетчик бобов */