powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Database Comparer: Пакеты
20 сообщений из 20, страница 1 из 1
Database Comparer: Пакеты
    #39700568
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно сделать так, чтобы в скрипте на обновление сначала обновлялись заголовки всех пакетов, а только потом их тела?
А то сейчас приходится руками менять порядок
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39700719
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще лучше - сначала дропать тело всех измененных пакетов, потом обновлять заголовки и только потом создавать тело

Тут еще один нюанс. Рефакторил один пакет. Функцию переделал на процедуру. От нее зависело два других пакета у которых поменялось только тело и эксперт в скрипт на обновление добавил только пересоздание тела (без заголовка). Так вот - скрипт не смог выполнится ругань на несоответствие сигнатуры в заголовке и теле. (Хотя ни эксперт ни я различий не увидел). Добавил заголовок - скрипт выполнился успешно. После этого убрал заголовки этих двух пакетов и скрипт выполнился успешно. Т.е. похоже на баг сервера.

Может включать обновления заголовка для случая когда меняется только тело?
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39700943
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так это баг сервера? Или не баг сервера? Или что еще?
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39701236
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpertТак это баг сервера? Или не баг сервера? Или что еще?
Похоже на баг, но не особо воспроизводится...

Проблема в неправильном порядке обновления пакетов.

Как по мне, то порядок должен быть такой:
1. сначала дропать тело всех измененных пакетов
2. потом обновлять заголовки
3. только потом создавать тело

И как опция (по галке, если можно) - включать обновления заголовка для случая когда меняется только тело
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39701676
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще - если поменялся только заголовок, то тело надо перекомпилировать иначе оно становится невалидным
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702063
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slay2012И еще - если поменялся только заголовок, то тело надо перекомпилировать иначе оно становится невалидным

Это сделал.
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702065
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slay2012Проблема в неправильном порядке обновления пакетов.

Как по мне, то порядок должен быть такой:
1. сначала дропать тело всех измененных пакетов
2. потом обновлять заголовки
3. только потом создавать тело

Мне сие не кажется правильным. Нафига тогда пакеты разделены на заголовок и тело, если на каждый чих их надо практически заново пересоздавать?
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702117
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpertslay2012Проблема в неправильном порядке обновления пакетов.

Как по мне, то порядок должен быть такой:
1. сначала дропать тело всех измененных пакетов
2. потом обновлять заголовки
3. только потом создавать тело

Мне сие не кажется правильным. Нафига тогда пакеты разделены на заголовок и тело, если на каждый чих их надо практически заново пересоздавать?

А как иначе если есть зависимости между пакетами?
Меняется сигнатура или удаляется процедура/функция и все - пока не удалишь тело зависимых пакетов обновить не даст.

спорным (не правильным) тут только это:
slay2012И как опция (по галке, если можно) - включать обновления заголовка для случая когда меняется только тело

У меня один раз сервер не захотел принимать тело, пока не обновил заголовок (хотя он и не менялся). Ругался на несовпадение сигнатуры процедуры. Скорее всего это баг, но воспроизвести не смог.
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702154
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slay2012А как иначе если есть зависимости между пакетами?
Меняется сигнатура или удаляется процедура/функция и все - пока не удалишь тело зависимых пакетов обновить не даст.


Про зависимости, заметь, у тебя только вот сейчас всплыло.
Я же по другому поводу недоумевал: зачем, например, дропать тело и обновлять заголовок, если что-то там в теле изменилось?

Короче, мне пока не очень понятно, что там не так с пакетами. Как сейчас компарер их обновляет?
У меня нет тест-кейза с пакетами под рукой, проверить с ходу не могу.
Можешь сделать свой и прислать мне.
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702188
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpertКороче, мне пока не очень понятно, что там не так с пакетами. Как сейчас компарер их обновляет?


Сейчас порядок такой:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR ALTER PACKAGE PackageA as ....
RECREATE PACKAGE BODY PackageA as ....
CREATE OR ALTER PACKAGE PackageB as ....
RECREATE PACKAGE BODY PackageB as ....
--тут менялось только тело
RECREATE PACKAGE BODY PackageC as ....



Порядок самих пакетов очень похож на алфавитный.

Первая проблема - это если в PackageA используется процедура/функция из пакета PackageB. На момент обновления тела PackageA будет облом.
Сейчас я такое решаю ручным изменением порядка на вот такой:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE OR ALTER PACKAGE PackageA as ....
CREATE OR ALTER PACKAGE PackageB as ....
RECREATE PACKAGE BODY PackageA as ....
RECREATE PACKAGE BODY PackageB as ....
--тут менялось только тело
RECREATE PACKAGE BODY PackageC as ....



Вторая проблема - это если в PackageA или PackageB изменилась сигнатура процедуры или ее удалили, которую использует PackageC.
В этом случае порядок надо вот такой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
DROP PACKAGE BODY PackageC;
CREATE OR ALTER PACKAGE PackageA as ....
CREATE OR ALTER PACKAGE PackageB as ....
RECREATE PACKAGE BODY PackageA as ....
RECREATE PACKAGE BODY PackageB as ....
--тут менялось только тело
RECREATE PACKAGE BODY PackageC as ....



Собственно, чтобы не заморачиватся с определением зависимостей я и предлагаю:
1. дропаем тела всех измененных пакетов (можно пропустить, если нет изменений в заголовках)
2. Обновляем заголовки (если есть)
3. Создаем тело все дропнутых на первом шаге.
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702391
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй эту версию:
www.ibexpert.com/rus/ibe_sfx_pkg.exe
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702426
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpertПопробуй эту версию:
www.ibexpert.com/rus/ibe_sfx_pkg.exe

Теперь ругань на отсутствие into (используется as cursor)
Код: plaintext
1.
2.
3.
Parsing database object definitions...
==== Error ==== : EduProtocol: Missing: INTO (AS)
                  Script:  Line:317 Pos:8
Код: sql
1.
2.
3.
4.
5.
for select
    ...
from ...
as cursor cur
do ...
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702453
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slay2012Теперь ругань на отсутствие into (используется as cursor)


У меня не воспроизводится.
Подожду нормального тест-кейза, пожалуй. Надоело самому их придумывать.
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39702459
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не в ту тему ответил....

По этой теме:

Тело измененного пакета дропается, но вот обновление заголовка надо бы перенести до обновления тела.
Сейчас получился такой порядок:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DROP PACKAGE BODY P1;
DROP PACKAGE BODY P2;
DROP PACKAGE BODY P3;

RECREATE PACKAGE BODY P1 as ...
RECREATE PACKAGE BODY P2 as ...

CREATE OR ALTER PACKAGE P3 as ...
RECREATE PACKAGE BODY P3 as ...



А нужно вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DROP PACKAGE BODY P1;
DROP PACKAGE BODY P2;
DROP PACKAGE BODY P3;

CREATE OR ALTER PACKAGE P3 as ...

RECREATE PACKAGE BODY P1 as ...
RECREATE PACKAGE BODY P2 as ...
RECREATE PACKAGE BODY P3 as ...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Database Comparer: Пакеты
    #39867371
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сегодня опять нарвался на неверный порядок скрипта обновления.
Expert 2019.9.22.1

Получил вот такой порядок:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
1. Deactivating dependencies of objects
    DROP PACKAGE BODY Pkg1
    DROP PACKAGE BODY Pkg2
    DROP PACKAGE BODY Pkg3
2. Creating tables (without computed fields)
3. Creating indices
4. Creating foreign key constraints
5. Creating triggers
6. Altering packages
    RECREATE PACKAGE BODY Pkg1
    CREATE OR ALTER PACKAGE Pkg2
    RECREATE PACKAGE BODY Pkg2
    CREATE OR ALTER PACKAGE Pkg3
    RECREATE PACKAGE BODY Pkg3
7. Updating object comments
8. Revoking excess privileges
9. Granting missing privileges

Первыми обломились триггера - ибо использовали новые процедуры из Pkg2 и Pkg3
Потом обломился RECREATE PACKAGE BODY Pkg1 по той же причине

Собственно порядок должен быть вот такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
1. Deactivating dependencies of objects
    DROP PACKAGE BODY Pkg1
    DROP PACKAGE BODY Pkg2
    DROP PACKAGE BODY Pkg3
1.1. Тут заглушки для процедур/функций/триггеров у которых есть зависимости от измененных пакетов
2. Creating tables (without computed fields)
3. Creating indices
4. Creating foreign key constraints
4.1. Creating packages/Altering packages
    CREATE OR ALTER PACKAGE Pkg2
    CREATE OR ALTER PACKAGE Pkg3
5. Creating triggers/procedures/functions
6. Altering packages body
    RECREATE PACKAGE BODY Pkg1
    RECREATE PACKAGE BODY Pkg2
    RECREATE PACKAGE BODY Pkg3
7. Updating object comments
8. Revoking excess privileges
9. Granting missing privileges
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39867403
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Подожду нормального тест-кейза, пожалуй. Надоело самому их придумывать." (c) мой
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39867415
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IBExpert"Подожду нормального тест-кейза, пожалуй. Надоело самому их придумывать." (c) мой

В каком виде надо?
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39867448
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slay2012В каком виде надо?

Два скрипта или две базы, которые я могу сравнить и воспроизвести проблему.
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39867453
slay2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Завтра сделаю.
Куда слать?
...
Рейтинг: 0 / 0
Database Comparer: Пакеты
    #39867462
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slay2012Куда слать?

На адрес в профиле.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Database Comparer: Пакеты
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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