powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Сравнение триггеров вьюх
4 сообщений из 4, страница 1 из 1
Сравнение триггеров вьюх
    #40012795
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При сравнении структур двух баз для триггеров подвязаных к view не создается заглушка
Код: sql
1.
2.
3.
4.
5.
ALTER TRIGGER TR_VW_TEST_BIU0
AS
BEGIN
  EXIT;
END


В итоге, если у view пропало поле, которое использовалось в триггере, то возникает ошибка при ALTER VIEW

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Сравнение триггеров вьюх
    #40012947
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужны скрипты баз для тест-кейза. Сам я их придумывать не буду.
...
Рейтинг: 0 / 0
Сравнение триггеров вьюх
    #40013021
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert
Нужны скрипты баз

Target.fdb
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
/******************************************************************************/
/***         Generated by IBExpert 2020.10.19.1 29.10.2020 12:27:02         ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE "TEST" (
    "ID"       INTEGER NOT NULL,
    "VAL_INT"  INTEGER,
    "VAL_STR"  INTEGER
);




/******************************************************************************/
/***                                 Views                                  ***/
/******************************************************************************/


/* View: "VW_TEST" */
CREATE VIEW "VW_TEST"(
    "ID",
    "VAL_INT",
    "VAL_STR")
AS
SELECT
  t.id,
  t.val_int,
  t.val_str
FROM
  test t
;




/******************************************************************************/
/***                              Primary keys                              ***/
/******************************************************************************/

ALTER TABLE "TEST" ADD CONSTRAINT "PK_TEST" PRIMARY KEY ("ID");


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/***                      Triggers for updatable views                      ***/
/******************************************************************************/



/* Trigger: "TR_VW_TEST_BI0" */
CREATE TRIGGER "TR_VW_TEST_BI0" FOR "VW_TEST"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  POST_EVENT 'DUMMY_EVENT';
END
^


ALTER TRIGGER "TR_VW_TEST_BI0"
AS
BEGIN
  INSERT INTO test (
    id,
    val_int,
    val_str
  ) VALUES (
    NEW.id,
    NEW.val_int,
    NEW.val_str
  );
END
^

SET TERM ; ^


Source.fdb
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
/******************************************************************************/
/***         Generated by IBExpert 2020.10.19.1 29.10.2020 12:24:39         ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE "TEST" (
    "ID"       INTEGER NOT NULL,
    "VAL_INT"  INTEGER,
    "VAL_STR"  INTEGER
);




/******************************************************************************/
/***                                 Views                                  ***/
/******************************************************************************/


/* View: "VW_TEST" */
CREATE VIEW "VW_TEST"(
    "ID",
    "VAL_STR")
AS
SELECT
  t.id,
  t.val_str
FROM
  test t
;




/******************************************************************************/
/***                              Primary keys                              ***/
/******************************************************************************/

ALTER TABLE "TEST" ADD CONSTRAINT "PK_TEST" PRIMARY KEY ("ID");


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/***                      Triggers for updatable views                      ***/
/******************************************************************************/



/* Trigger: "TR_VW_TEST_BI0" */
CREATE TRIGGER "TR_VW_TEST_BI0" FOR "VW_TEST"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  POST_EVENT 'DUMMY_EVENT';
END
^


ALTER TRIGGER "TR_VW_TEST_BI0"
AS
BEGIN
  INSERT INTO test (
    id,
    val_str
  ) VALUES (
    NEW.id,
    NEW.val_str
  );
END
^

SET TERM ; ^

Из вьюхи пропало поле val_int.

Запускаем сравнение баз с включенной опцией Alter views instead DROP/CREATE
Все опции сравнения
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
execute ibeblock
as
begin
  cbb = 'execute ibeblock (LogMessage variant)
         as
         begin
           ibec_progress(LogMessage);
         end';

  SourceDB = ibec_CreateConnection(__ctInterBase, 
                                   'DBName="Server2:D:\DB\TEMP\Source.fdb";
                                   ClientLib=fbclient.dll;
                                   User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3');
  TargetDB = ibec_CreateConnection(__ctInterBase, 
                                   'DBName="Server2:D:\DB\Temp\Target.fdb";
                                   ClientLib=fbclient.dll;
                                   User=SYSDBA; Password=masterkey; Names=WIN1251; SqlDialect=3');
  try
    ibec_CompareMetadata(SourceDB, TargetDB,
                         '', -- Don't forget to specify file name for the result script
                         'ServerVersion=FB30;
                          OmitGrants;
                          SafeDatatypeConversion;
                          IgnoreIBEObjects;
                          DescriptionMode=COMMENT;
                          AlterViews', 
                         cbb);
  finally
    ibec_CloseConnection(TargetDB);
    ibec_CloseConnection(SourceDB);
  end;
end;


Получившийся скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
/* Server version: WI-V6.3.6.33328 Firebird 3.0 
   SQLDialect: 3. ODS: 12.0. Forced writes: On. Sweep interval: 20000.
   Page size: 16384. Cache pages: 256 (4096 Kb). Read-only: False. */
SET CLIENTLIB 'fbclient.dll';
SET NAMES WIN1251;

SET SQL DIALECT 3;

CONNECT 'Server2:D:\DB\Temp\Target.fdb' USER 'SYSDBA' PASSWORD 'masterkey';

SET AUTODDL ON;

/******************************************************************************/
/****                 Deactivating dependencies of objects                 ****/
/******************************************************************************/
ALTER VIEW VW_TEST (
    ID,
    VAL_INT,
    VAL_STR)
AS
SELECT
    CAST(NULL AS INTEGER),
    CAST(NULL AS INTEGER),
    CAST(NULL AS INTEGER)
FROM RDB$DATABASE;


/******************************************************************************/
/****                       Creating/altering views                        ****/
/******************************************************************************/
ALTER VIEW VW_TEST (
    ID,
    VAL_STR)
AS
SELECT
  t.id,
  t.val_str
FROM
  test t;


/******************************************************************************/
/****                          Altering triggers                           ****/
/******************************************************************************/
SET TERM ^ ;

ALTER TRIGGER TR_VW_TEST_BI0
AS
BEGIN
  INSERT INTO test (
    id,
    val_str
  ) VALUES (
    NEW.id,
    NEW.val_str
  );
END
^


SET TERM ; ^

Вначале идет ALTER VIEW с удалением поля, и только потом модификация триггера.

Для таблиц, в таких случаях, перед ALTER TABLE вставляется блок-заглушка для триггера
Код: sql
1.
2.
3.
4.
5.
ALTER TRIGGER TR_VW_TEST_BI0
AS
BEGIN
  EXIT;
END
...
Рейтинг: 0 / 0
Сравнение триггеров вьюх
    #40014092
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исправил.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Сравнение триггеров вьюх
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]