powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка во view при изменении домена строкового поля таблицы.
19 сообщений из 19, страница 1 из 1
Ошибка во view при изменении домена строкового поля таблицы.
    #39504151
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

FB 2.5.6 CS.
Все действия выполнялись в isql.

Создадим таблицу и заполним ее данными:
Код: sql
1.
2.
3.
4.
SQL> CREATE TABLE T (
CON>     ID   INTEGER NOT NULL,
CON>     VAL  VARCHAR(10)
CON> );



На базе таблицы создадим view:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> CREATE OR ALTER VIEW V (
CON>     ID,
CON>     VAL )
CON> AS
CON> SELECT ID,
CON>        VAL
CON>   FROM T
CON> ;



Создадим домен и изменим на него тип поля VAL:
Код: sql
1.
2.
3.
SQL> CREATE DOMAIN D_STR10 AS VARCHAR(10);

SQL> ALTER TABLE T ALTER COLUMN VAL TYPE D_STR10;



Ошибка попытки удалния системного домена:
Код: powershell
1.
2.
3.
4.
5.
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-cannot delete
-DOMAIN RDB$2
-there are 1 dependencies




Немного изменим сценарий:

Создадим таблицу:
Код: sql
1.
2.
3.
4.
5.
6.
SQL> CREATE DOMAIN D_STR10 AS VARCHAR(10);

SQL> CREATE TABLE T (
CON>     ID   INTEGER NOT NULL,
CON>     VAL  D_STR10
CON> );



На базе таблицы создадим view:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> CREATE OR ALTER VIEW V(
CON>     ID,
CON>     VAL)
CON> AS
CON> SELECT ID,
CON>        VAL
CON>   FROM T
CON> ;



Изменим тип и заполним значения поля VAL:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> CREATE DOMAIN D_STR20 AS VARCHAR(20);

SQL> ALTER TABLE T ALTER COLUMN VAL TYPE D_STR20;

SQL> INSERT INTO T (ID, VAL)
CON>        VALUES (1, '---------1---------1');
SQL> INSERT INTO T (ID, VAL)
CON>        VALUES (2, '---------2---------2');
SQL> COMMIT;



Запрос из view вызывает ошибку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> SELECT *
CON>   FROM V;

          ID VAL
============ ==========
Statement failed, SQLSTATE = 22001
arithmetic exception, numeric overflow, or string truncation
-string right truncation



Понятно, что после перекомпиляции view ошибка исчезает.

С уважением, Polesov.
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504159
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.08.2017 15:18, Polesov пишет:
> Понятно, что после перекомпиляции view ошибка исчезает.

ну а?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504165
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovПонятно, что после перекомпиляции view ошибка исчезает.

Вот ты сами и вышел на решение. Всё верно. При изменении типа поля в таблице требуется перекомпиляция всех зависимых от таблицы объектов: процедур, просмотров, триггеров, которые это поле используют.
А что дальше-то? В чём вопрос, собственно?
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504189
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В оракле тоже инвалидами становятся после каждого чиха.
Беспердел! :)
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504208
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o_v_aА что дальше-то? В чём вопрос, собственно?
Ну, в идеале было бы предупреждение, что данное поле используется еще где-либо.
А так надо помнить, что при изменении домена у поля... (и далее по тексту)
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504215
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

блокировать изменение домена - плохо.
не перекомпилировать автоматом объекты - плохо.
выдавать ошибку рантайма - плохо.

Я бы посоветовал определиться.
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504217
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman> В оракле тоже

Обсуждалось же много раз.
Едва ли на это стоит ориентироваться.
Просто иногда лучшего варианта нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504218
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> Я бы посоветовал определиться.

Это далеко не все возможные варианты.
Есть еще "инвалидировать зависимости
и сообщить об этом", например.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504219
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovА так надо помнить, что при изменении домена у поля... (и далее по тексту)
Нужно помнить заглянуть на таб с зависимостями, да...
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504220
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой таб, куда заглянуть? В isql ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504221
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про "зависимости зависимостей" я уж молчу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504230
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамКакой таб, куда заглянуть? В isql ?
В эксперте вестимо.
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504233
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЕсть еще "инвалидировать зависимости
и сообщить об этом", например.

в данном конкретном случае это и получилась "инвалидация" - вью не работает после изменения домена. Получаем ошибку в рантайме, все ок.
Если бы оно тупо инвалидировалось из-за этого изменения, то не работало бы даже если бы с приведением типов было все ок.
понятно, что могут быть и другие случаи, но тут все как-то более-менее нормально получается, я не вижу причин жаловаться.
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504239
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvполучилась "инвалидация" - вью не работает после изменения домена

вью не работает только в том случае, если после замены домена были изменения данных, превышающие по размеру допустимое значение старого домена. И если ошибка всплывет через какое-то время, поиск ее причины становится весьма не очевидным.
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504240
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvPolesov,

блокировать изменение домена - плохо.
не перекомпилировать автоматом объекты - плохо.
выдавать ошибку рантайма - плохо.

Я бы посоветовал определиться.

А ошибке рантайма альтернативы нет? Может быть, какое-нибудь предупреждение?
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504253
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovИ если ошибка всплывет через какое-то время, поиск ее причины становится весьма не очевидным.
убиться можно. То есть, домен мы создаем чтобы использовать его в таблицах, процедурах, и т.д. А что после изменения размера строкового столбца это может повлиять на зависимые объекты, мы не думаем.
Я советую вам в систему проверки записать требование, чтобы при изменении чего-то вручную контролировали все зависимости. Скрипт же можно извлечь через isql -x, и его проверить.

PolesovА ошибке рантайма альтернативы нет? Может быть, какое-нибудь предупреждение?
проверять все зависимости на соответствие типа? Перекомпилировать автоматом? Сервер не может выдать сразу 10 ошибок при возникновении проблем с этим в 10 объектах.
Варианты - либо не допускать изменения метаданных при зависимостях, либо допускать, но выдавать рантайм-ошибку.
Либо, иметь флаг инвалидации и инвалидировать зависимые объекты, что как я уже сказал, практически одно и то же. В Оракле вы как раз это и получите.
Проблем (таких) не будет только если абсолютно все будет интерпретироваться в рантайме, а не компилироваться заранее. И если в качестве столбцов будет использоваться именно домен.
Насколько я помню, у разработчиков ФБ уже проскакивала мысль об интерпретации. Но я не в курсе, насколько далеко она зашла.
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504256
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvЯ советую вам в систему проверки записать требование, чтобы при изменении чего-то вручную контролировали все зависимости.
Так и пытаемся делать, но случаются огрехи.

kdvСервер не может выдать сразу 10 ошибок при возникновении проблем с этим в 10 объектах.
Пусть выдаст одну первую.
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504268
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvблокировать изменение домена - плохо.

А по-моем - хорошо и правильно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка во view при изменении домена строкового поля таблицы.
    #39504291
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> в данном конкретном случае это и получилась "инвалидация" - вью не работает

Вью работает. Данные (некоторые) не помещаются. А могут и помещаться.

kdv> Получаем ошибку в рантайме, все ок.

Я про рантайм ничего не говорил.

kdv> Если бы оно тупо инвалидировалось из-за этого изменения,
kdv> то не работало бы даже если бы с приведением типов было все ок.

Вовсе необязательно инвалидировать без необходимости.

> я не вижу причин жаловаться.

Ну как обычно, путаете понятия "жить можно", "жаловаться"
и "есть обширное поле для улучшений". Три разных понятия.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка во view при изменении домена строкового поля таблицы.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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