EXECUTE BLOCK AS
  DECLARE VARIABLE P_SQL_STMT BLOB SUB_TYPE TEXT;
BEGIN
  IF(EXISTS(
      SELECT P.RDB$PROCEDURE_ID
      FROM   RDB$PROCEDURES P
      WHERE  (P.RDB$PROCEDURE_NAME='PROC$_DB_GIUD')
  ))THEN EXIT;

  P_SQL_STMT =
'CREATE OR ALTER PROCEDURE PROC$_DB_GUID RETURNS ( '||ASCII_CHAR(13)||ASCII_CHAR(10)||
    '  GUID VARCHAR(38) '||ASCII_CHAR(13)||ASCII_CHAR(10)||
    ')AS '||ASCII_CHAR(13)||ASCII_CHAR(10)||
    'BEGIN '||ASCII_CHAR(13)||ASCII_CHAR(10)||
' GUID = '''||UUID_TO_CHAR(GEN_UUID())||'''; '||ASCII_CHAR(13)||ASCII_CHAR(10)||
    '  SUSPEND; '||ASCII_CHAR(13)||ASCII_CHAR(10)||
    'END';

  EXECUTE STATEMENT :P_SQL_STMT;
END

Хоть при каждом запуске приложения выполняй.
А если настоящий шахид, то можно тело блока вообще в триггер ON CONNECT впихнуть.



Ответить