powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос знатокам по процедурам
25 сообщений из 27, страница 1 из 2
Вопрос знатокам по процедурам
    #39737951
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FB 2.5.8
1. Переменные объявленные в declare и returns без default и not null при входе имеют значение NULL?
2. Переменные обявленные в declare и returns с default имеют значение default?
3. Переменные объявленные в declare и returns с not null при входе какое имеют значение?
4. Объявленая переменная х меняется в теле процедуры и имеет какое-то значение.
Затем происходит select .... from ... into :x. Этот select пуст. Какое значение будет иметь переменная x?
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39737954
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959,

1. Да
2. Для declare да, в returns ты не можешь объявить default
3. нет. И процедура будет ругаться при попытки получения значения такой переменной
4. то же что и до select ... into

нежели самому сложно тест сделать? Даже ХП создавать не надо есть execute block
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39737957
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
3. Был вопрос - какое имеют значение?
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39737963
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959returns с not null
это ахинея. Типа, процедура должна возмутиться, что ты в returns ничего не записал?
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39737964
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Все не так просто.

5. В переменных returns default отрабатываются при suspend? Или только при входе в процедуру?

В документации про это я ничего не нашел. Скажем так- про жизненный цикл default и not null в теле процедуры.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39737966
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Дык возмущается....
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39737968
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959,

я тебе вроде уже сказал что default нельзя объявить в returns. Попробуй выполни

Код: sql
1.
2.
3.
4.
5.
6.
create procedure p0
returns (a int default 1)
as
begin
  suspend;
end



Вот not null кстати позволяется. И как я уже сказал, если выходная переменная не инициализирована в селективной ХП, то будет ошибка. При первом "suspend". Для экспериментов

Код: sql
1.
2.
3.
4.
5.
6.
execute block
returns (a int not null)
as
begin
 -- suspend;
end



Для локальных переменных not null проверяется только при обращении к переменой. Если она просто объявлена и не используется то по фигу.

По поводу документации. Я считаю что это настолько очевидные вещи, что вопросов ни у кого не вызывают. Ты первый кто спрашивает
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39737973
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
Поработав с разными базами некоторые вещи тоже для меня были очевидны, а реализация в FB оказалась иной.
Спасибо за разъяснения.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738059
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959 а реализация в FB оказалась иной.
и насколько она оказалась иной от "интуитивно понятной" или "практической"?

select from insert into для многих людей, почему-то, оказывается интуитивно непонятным. Я всё время привожу пример
if a = 0 then
b:=5;
что будет в b, если a <> 0 ? Никто не знает. Вот незадача-то.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738061
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

не ну оракл генерирует ошибку (no data found) на пустом селекте, которую надо ещё обработать.
Может это имеется в виду? Лично мне поведение оракла не кажется удобным
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738072
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

в моем примере компилятор тоже не генерит ошибку. Теоретически, конечно, можно было бы обрабатывать это дело по какому-нибудь SQLCODE, но лично мне более близок вариант типа
Код: sql
1.
2.
3.
4.
5.
6.
s:=-1;
select field from table into :s;
if s <> -1 then
...
if is is null then
...



чем when sqlcode .... then ...
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738126
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

А если селект как раз и вернул этот самый -1? Ведь есть же для этого ROW_COUNT.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738140
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

по поводу ROW_COUNT согласен. Но справедливости ради, обычно разработчик знает что может, а что не может вернуть select, а что в нём является "специальным" значением. Если этот field является FK на какой-нибудь маленький служебный справочник, то вполне можно сказать какие значения точно не попадутся. Если FIELD имеет ограничение NOT NULL, то можно утверждать что NULL оно не вернёт.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738194
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Типа каждую переменную в into я должен предварительно выставить в null, для того чтоб проверить что select пустой?
Я ж привел простой пример с одним параметром....
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738195
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
Пробовал работать с ROW_count в FB2.5.8
Логики никакой не словил.
Я только про себя и меру развития своей логики...
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738197
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959,

если ты этим переменным ранее значение не присвоил, то они по умолчанию NULL. Это тебе не delphi, C++ где в неинициализированных переменных может быть всякий мусор.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738201
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FА если селект как раз и вернул этот самый -1? Ведь есть же для этого ROW_COUNT.
-1 это просто пример. Если столбец идентификатор, то там значения от нуля и выше.
Если значения другие, значит надо присваивать такое, которого заведомо нет в таблице.
ROW_COUNT - да, можно использовать, но я ортодокс, так что, без него.

p.s. по последним топикам в этом разделе такое впечатление, что у людей умственная деградация происходит. Извините за констатацию, если что.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738202
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Спасибо за констацию.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738203
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959Симонов Денис,

Типа каждую переменную в into я должен предварительно выставить в null, для того чтоб проверить что select пустой?
Я ж привел простой пример с одним параметром....

посмотри на for select и может тогда станет понятнее логика работа select
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738249
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959Спасибо за констацию
этот топик вполне норм, только ответы в нём не всегда ок.
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738294
bsa1959
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m,
был вопрос не for select, а просто select .....
разниза есть?
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738319
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959разниза есть?

Нет. Технически разница между ними нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738345
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovbsa1959разниза есть?

Нет. Технически разница между ними нет.

Код: sql
1.
select 1 from RDB$DATABASE into I;


multiple rows in singleton select.

Код: sql
1.
for select first 1 1 from RDB$RELATIONS into I do begin end


OK

Таки есть :)
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738372
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959m7m,
был вопрос не for select, а просто select .....
разниза есть?
Сисдба Мастеркеевич Таки есть :)

В контексте заданного вопроса
bsa1959FB 2.5.8
4. Объявленая переменная х меняется в теле процедуры и имеет какое-то значение.
Затем происходит select .... from ... into :x. Этот select пуст. Какое значение будет иметь переменная x?
разницы нет никакой

Код: sql
1.
2.
3.
4.
5.
6.
7.
x=...;
for select .... from ... into :x -- Этот select пуст
do begin
......
end
-- Есть вопросы по поводу значения переменной x в этом месте? 
-- мне почему-то кажется что вопросов нет
...
Рейтинг: 0 / 0
Вопрос знатокам по процедурам
    #39738373
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bsa1959FB 2.5.8
1. Переменные объявленные в declare и returns без default и not null при входе имеют значение NULL?

в последних версиях да. раньше бывал мусор.

bsa19593. Переменные объявленные в declare и returns с not null при входе какое имеют значение?

никакого.
если обявлены с доменом not null, то при обращении на чтение или запись null выскочит обшибка

bsa19594. Объявленая переменная х меняется в теле процедуры и имеет какое-то значение.
Затем происходит select .... from ... into :x. Этот select пуст. Какое значение будет иметь переменная x?
никакого. даже обращения к ней не будет

на выходе неприсвоенные переменные, с доменами not null вызовут ошибку
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос знатокам по процедурам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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