powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
11 сообщений из 86, страница 4 из 4
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39594694
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxYuRockпропущено...
А что, если б меняла - было бы очевиднее?
Да.
А на что меняла, разрешите полюбопытствовать?
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39594719
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никого же не смущает, что изначально переменные инициализированы как NULL.
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39594720
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём?
У меня щас под рукой FB нету проверить :(
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39594724
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryКстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём?
У меня щас под рукой FB нету проверить :(
По-моему исключение будет, если так и не инициализировать ее.
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39594726
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryНикого же не смущает, что изначально переменные инициализированы как NULL.Не всегда. Или default-значением домена.
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39594731
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockWildSeryНикого же не смущает, что изначально переменные инициализированы как NULL.Не всегда. Или default-значением домена.Или default-значением при определении переменной. Я же не об этом пишу.
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39595053
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryКстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём?
У меня щас под рукой FB нету проверить :(

У меня нет под рукой FB, допускающего расширенный синтаксис декларирования переменных, но чисто по логике вещей, если бы я эту фичу делал, я бы отсёк такую конструкцию на уровне синтаксиса. Ибо она противоречива по определению.
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39595062
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

Код: sql
1.
2.
3.
4.
5.
6.
7.
SQL> set term ^;
SQL> execute block as
CON> declare i int not null;
CON> begin
CON>   exit;
CON> end
CON> ^


Нет ошибки.
Но

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> execute block returns (n int) as
CON> declare i int not null;
CON> begin
CON>   n = i; suspend;
CON> end
CON> ^

           N
============
Statement failed, SQLSTATE = 42000
validation error for variable I, value "*** null ***"
-At block line: 4, col: 3
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39595069
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаWildSeryКстати, никогда не задумывался, а чем начально инициализируется переменная DECLARE V1 INT NOT NULL ? Нулём?
У меня щас под рукой FB нету проверить :(

У меня нет под рукой FB, допускающего расширенный синтаксис декларирования переменных, но чисто по логике вещей, если бы я эту фичу делал, я бы отсёк такую конструкцию на уровне синтаксиса. Ибо она противоречива по определению.
Проверил. Такая фича разрешена, и я считаю это логичным, ведь можно же объявлять переменные по домену, который может быть с ограничением NOT NULL.

Работает так (ИМХО):
- инициализируется NULL-ом;
- если к переменной до [корректной] инициализации не было обращений (или вообще не было обращений) - всё ок;
- если произошло обращение, а она всё еще NULL - исключение validation error value ***null***.

Проверял на 3.0.2, но в 2.1 тоже так был, насколько я помню.

Пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE NEW_PROCEDURE ()
RETURNS(
  OUT_ID INTEGER
)
AS
DECLARE VARIABLE ID INTEGER NOT NULL;
--DECLARE VARIABLE ID T_KEY; -- результат тот же /*T_KEY: CREATE DOMAIN T_KEY AS INTEGER NOT NULL;*/
BEGIN
  OUT_ID = ID;
  SUSPEND;
END


Компилится, при
Код: sql
1.
SELECT * FROM NEW_PROCEDURE


выдается иключение если не закомментить строку "OUT_ID = ID"
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39595071
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда, не успел...
...
Рейтинг: 0 / 0
Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
    #39595298
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladСтарый плюшевый мишка,
Нет ошибки.
Но
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> execute block returns (n int) as
CON> declare i int not null;
CON> begin
CON>   n = i; suspend;
CON> end
CON> ^

           N
============
Statement failed, SQLSTATE = 42000
validation error for variable I, value "*** null ***"
-At block line: 4, col: 3

Lazy initialization
...
Рейтинг: 0 / 0
11 сообщений из 86, страница 4 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неустановка локальной переменной при пустом наборе: стандарт, фича или баг?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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