Сравнение триггеров вьюх
#40013021
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: Украина, Харьков
Сообщения: 13 612
|
|
Target.fdb 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 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
Все опции сравнения 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;
Получившийся скрипт 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 вставляется блок-заглушка для триггера
1. 2. 3. 4. 5.
ALTER TRIGGER TR_VW_TEST_BI0
AS
BEGIN
EXIT;
END
|
|