powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неожиданности select ... into в ХП
16 сообщений из 41, страница 2 из 2
Неожиданности select ... into в ХП
    #38553175
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Johnnyyy,

и что тут неожиданного?
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553181
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Johnnyyy,

читал бы ты
http://www.ibase.ru/devinfo/sp_call.htm
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553197
Johnnyyy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvJohnnyyy,

читал бы ты
http://www.ibase.ru/devinfo/sp_call.htm

не нашел там присваивание в переменную без into
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553209
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Johnnyyy,

понимаешь ли когда ты делаешь присваивание переменной её значение должно измениться в любом случае, поскольку записей нет логично записать null. Когда делается select ... into, то оно значение переменной измениться только если запрос вернёт данные. Всё довольно просто. И по мне так это намного лучше чем делает Оракл, генерируя исключение NO_DATA_FOUND
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553224
Johnnyyy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисJohnnyyy,

понимаешь ли когда ты делаешь присваивание переменной её значение должно измениться в любом случае, поскольку записей нет логично записать null. Когда делается select ... into, то оно значение переменной измениться только если запрос вернёт данные. Всё довольно просто. И по мне так это намного лучше чем делает Оракл, генерируя исключение NO_DATA_FOUND

Так я понял это опытным путем. Ни в одном туторе просто не находил конструкции с описанием, которую привел
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553255
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JohnnyyyНи в одном туторе просто не находил конструкции с описанием, которую привел

а это что?
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553288
Johnnyyy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисJohnnyyyНи в одном туторе просто не находил конструкции с описанием, которую привел

а это что?

спасибо за ссылку
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553297
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисеё значение должно измениться в любом случае...

то оно значение переменной измениться только если запрос вернёт данные.Сам себе противоречишь. Был null, и стал null - где изменение?

Симонов ДенисИ по мне так это намного лучше чем делает Оракл, генерируя исключение NO_DATA_FOUNDЧем оно "намного" лучше?

И там и там нужно написать обертку (хоть count(*), max(value) into l_cnt, l_value или обработку исключения) если надо знать точно, выбралась ли одна или ноль записей.
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553347
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГхостикСам себе противоречишь. Был null, и стал null - где изменение?
а если был не null, стал null

ГхостикЧем оно "намного" лучше?
тем что писать меньше, если точно знаешь что выбираемый столбец not null, то достаточно сделать.

Код: plsql
1.
2.
3.
var = null;
select myfield from table into :var;
if (var is not null) then



а чтобы определить сколько записей вернулось 1 или 0, есть такая переменная как ROW_COUNT

Код: plsql
1.
2.
select myfield from table into :var;
if (ROW_COUNT = 1) then



и никаких тебе обработок исключений, MAX, COUNT. Тем более это не самые дешёвые операции
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553403
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисГхостикСам себе противоречишь. Был null, и стал null - где изменение?
а если был не null, стал nullВыкинул половину своего утверждения, ложную, и говоришь что оно истинное.

Симонов Денисесли точно знаешь что выбираемый столбец not null, то достаточно сделать.Опасная практика. Сегодня он not null, а завтра nullable, а весь код не забыли ли просмотреть?

Симонов Денисписать меньшеСравни:
Код: plsql
1.
2.
select myfield from table into :var;
if (ROW_COUNT = 1) then



Код: plsql
1.
2.
select count(*), max(myfield) into l_cnt, l_var from table;
if l_cnt = 1 then


Разница - на одно объявление переменной. Это ты называешь "намного"?

Симонов ДенисТем более это не самые дешёвые операцииО да. На нуле либо одной записи - особенно тяжелые.
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553444
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гхостик,

а теперь внимание, неожиданно запрос
Код: sql
1.
select myfield from table


вернул более 1 записи и вот это
Код: sql
1.
select count(*), max(myfield) into l_cnt, l_var from table;


спокойно проглотит эту ситуацию, где по идее должно быть исключение. Для обеспечения того же самого вам ещё потребуется добавить
Код: plsql
1.
if (ROW_COUNT > 1) then exception e_myerror;
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553460
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

тьфу не то написал

Код: plsql
1.
if (l_cnt > 1) then exception e_myerror;
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553485
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неудобные вопросы просто игнорируем?

Симонов Денисспокойно проглотит эту ситуацию, где по идее должно быть исключение. Да. Но смена количества полей в PK (одну запись обычно ищут именно так) - гораздо более редкое действие, чем смена not null на null. И код при этом просматривается тщательней.

А вообще, в оракле я обычно ни count, ни exception не делаю там, где предполагается одна запись. Там, где это может быть ошибкой пользовательского ввода - там обрабатываю no_data_found, и too_many_rows тоже не пропадут.
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38553518
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГхостикОпасная практика. Сегодня он not null, а завтра nullable, а весь код не забыли ли просмотреть?

это что ли неудобный вопрос? Ну так есть поля которые никогда не станут nullable и это я знаю точно. Хотя подход с проверкой количества записей универсальнее.
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38561268
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПо большому счету "select into param_list" это тот же "for select" только выполняющийся один раз,

dimitrименно так и реализовано. Цикл с ограничением сингулярности.

...и выкопали стюардессу.

А правильно ли это "с ограничением", а не "с проверкой" ?

Т.е. в 2.1 в check-триггере
Код: sql
1.
 var1 = ( select column1 from same_table s where s.id = new.parent_id )

выдал ошибку "select is illegal in this context"

Можно переписать на for с отдельным счётчиком, или с проверкой row_count, которую вроде бы поправили (но какой смысл у row_count внутри check в процессе Insert?)

var = (select ... ) выдаст ошибку при 2 и более значениях.

А select into без for - не выдаст. И выдаст ли он первую строку или последнюю - детали реализации (возможно уже задокументированные, но тем не менее - детали).

И возникает сомнение, правильно ли идеологически, что select-into не ограничивает (не проверяет, не навязывает) сингулярность результата ?
...
Рейтинг: 0 / 0
Неожиданности select ... into в ХП
    #38561298
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochА select into без for - не выдаст. И выдаст ли он первую строку или последнюю - детали реализации (возможно уже задокументированные, но тем не менее - детали).

И возникает сомнение, правильно ли идеологически, что select-into не ограничивает (не проверяет, не навязывает) сингулярность результата ?

Чего, чего? Ещё как выдаст.
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неожиданности select ... into в ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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