powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Сравнение БД. Вычисляемые поля.
6 сообщений из 6, страница 1 из 1
Сравнение БД. Вычисляемые поля.
    #38892108
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При сравнении таблиц (Инструменты->Сравнение БД), если было измененено вычисляемое поле до сих пор делается предварительный DROP вычисляемого поля, а потом ADD. Хотя начиная с Firebird 2.5 разрешён синтаксис изменения вычисляемых полей через ALTER

Код: plaintext
1.
2.
ALTER TABLE tablename
ALTER [COLUMN] gencolname [TYPE <datatype>]
{ GENERATED ALWAYS AS | COMPUTED [BY]} (<col_expr>)

это приводит к тому, что куча хранимых процедур в которых попали эти вычисляемые поля так же модифицируются. А имено удаляется их тело, а потом создаётся заново.

Пример:

Код: plsql
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.
/* Empty SP_GET_OWNERS for drop REGISTRATION(F_BYDATE) */
ALTER PROCEDURE SP_GET_OWNERS(CODE_HORSE INTEGER)
 RETURNS(FARM VARCHAR(100),
FARM_EN VARCHAR(100),
ADDRESS VARCHAR(100),
ADDRESS_EN VARCHAR(100),
EMAIL VARCHAR(50),
PHONE VARCHAR(50),
FAX VARCHAR(50),
PASSPORT VARCHAR(70),
COUNTRY VARCHAR(50),
COUNTRY_EN VARCHAR(50),
OWNERSHIP VARCHAR(50),
BYDATE CHAR(10),
REMARK BLOB SUB_TYPE 1)
 AS
 BEGIN SUSPEND; END
^

SET TERM ; ^

ALTER TABLE REGISTRATION DROP F_BYDATE;

ALTER TABLE REGISTRATION ADD F_BYDATE COMPUTED BY (
CASE
    WHEN BYDATE_MASK = 'XX.XX.XXXX' THEN NULL
    WHEN BYDATE_MASK = 'XX.XX.YYYY' THEN EXTRACT(YEAR FROM BYDATE)
    WHEN BYDATE_MASK = 'XX.YY.YYYY' THEN LPAD(EXTRACT(MONTH FROM BYDATE), 2, '0') || '.' ||
                                  CAST(EXTRACT(YEAR FROM BYDATE) AS CHAR(4))
    WHEN BYDATE_MASK = 'YY.YY.YYYY' THEN LPAD(EXTRACT(DAY FROM BYDATE), 2, '0') || '.' ||
                                  LPAD(EXTRACT(MONTH FROM BYDATE), 2, '0') || '.' ||
                                  CAST(EXTRACT(YEAR FROM BYDATE) AS CHAR(4))
END);



потом процедура SP_GET_OWNERS восстанавливается с тем же текстом, хотя в данном случае достаточно было бы просто сделать так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ALTER TABLE REGISTRATION ALTER F_BYDATE COMPUTED BY (
CASE
    WHEN BYDATE_MASK = 'XX.XX.XXXX' THEN NULL
    WHEN BYDATE_MASK = 'XX.XX.YYYY' THEN EXTRACT(YEAR FROM BYDATE)
    WHEN BYDATE_MASK = 'XX.YY.YYYY' THEN LPAD(EXTRACT(MONTH FROM BYDATE), 2, '0') || '.' ||
                                  CAST(EXTRACT(YEAR FROM BYDATE) AS CHAR(4))
    WHEN BYDATE_MASK = 'YY.YY.YYYY' THEN LPAD(EXTRACT(DAY FROM BYDATE), 2, '0') || '.' ||
                                  LPAD(EXTRACT(MONTH FROM BYDATE), 2, '0') || '.' ||
                                  CAST(EXTRACT(YEAR FROM BYDATE) AS CHAR(4))
END);
...
Рейтинг: 0 / 0
Сравнение БД. Вычисляемые поля.
    #38892212
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисдо сих пор делается предварительный DROPТут неподалеку уже был мой "плач ярославны" по аналогичному поводу, только касательно вьюх. Сдается мне, что эта проблема аналогична моей.
...
Рейтинг: 0 / 0
Сравнение БД. Вычисляемые поля.
    #38892222
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

ну с вьюхами там сложней. Надо проверять изменился ли состав полей вьюхи. А при редактировании вычисляемых полей ясен пень что ничего не менялось кроме выражения вычисляемого поля.
...
Рейтинг: 0 / 0
Сравнение БД. Вычисляемые поля.
    #38892240
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До таких вещей руки не скоро дойдут.
...
Рейтинг: 0 / 0
Сравнение БД. Вычисляемые поля.
    #38892312
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисничего не менялось кроме выражения вычисляемого поля.а тип поля? был integer стал date и привет.
...
Рейтинг: 0 / 0
Сравнение БД. Вычисляемые поля.
    #38893029
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая же бодяга при изменении CHECK CONSTRAINT у домена. Если после сравнения баз получается огроменная портянка, хотя вроде ничего глобального не делал, сразу лезу в изменения доменов, искать, есть ли такое.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Сравнение БД. Вычисляемые поля.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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