powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Структура Select в хранимой процедуре
12 сообщений из 12, страница 1 из 1
Структура Select в хранимой процедуре
    #32825734
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа подскажите в Informix 7.31.tc.4 возможно использовать такой вид Select в в хранимой процедуре

Select
(Select tb2.gggg From table2 tb2 where tb2.id = tb1.id)
From table1 tb1.........
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32825917
r2y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r2y
Гость
В Informix 7.30.tc.5 запрос работает (только причем хранимые?)
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32826019
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не компилится процедура с таким запросом, поэтому интересует поддерживается ли такая возможность в хранимой процедуре
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32826215
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maks_fГоспода подскажите в Informix 7.31.tc.4 возможно использовать такой вид Select в в хранимой процедуре

Select
(Select tb2.gggg From table2 tb2 where tb2.id = tb1.id)
From table1 tb1.........
Нет, в SPL 7.3 такого делать нельзя. Приходится преобразовывать в явный outer join.
Код: plaintext
1.
2.
3.
4.
5.
select
tb1.id,
tb2.gggg
from
tb1,outer tb2 
where tb1.id = tb2.id and ....
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32826974
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Однако странно простым Select это проходит а в процедуре нет.
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32827060
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно поподробнее? Какая ошибка генерится при создании процедуры? Производился ли ловля льва в Африке, т.е. усечение создания процедуры до конкретно такого кода. Еще лучше привести пример, с использованием стандартных таблиц, который воссоздает ситуацию.
Я что-то не примомню ограничения на такое использование. Под рукой к сожалению только 9-ка, но на 7.1 у меня такие запросы точно работали в SPL-ях. Впрочем, я уверен, что ничто им не мешало работать и в 5-ке.
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32827305
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaugavaА можно поподробнее? Какая ошибка генерится при создании процедуры? Производился ли ловля льва в Африке, т.е. усечение создания процедуры до конкретно такого кода. Еще лучше привести пример, с использованием стандартных таблиц, который воссоздает ситуацию.
Я что-то не примомню ограничения на такое использование. Под рукой к сожалению только 9-ка, но на 7.1 у меня такие запросы точно работали в SPL-ях. Впрочем, я уверен, что ничто им не мешало работать и в 5-ке.
Вот, прямо из dbaccess'а...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create procedure test()
define a like systables.tabid ;
define b int ;
select t.tabid,
(select count(*) from syscolumns c where t.tabid = c.tabid ) ncols
into a,b
from systables t
where tabname = 'systables';










   201: A syntax error has occurred.
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32827327
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В процессе удаления пустых строк был стёрт end procedure (при copy/paste в форум).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create procedure test()
define a like systables.tabid ;
define b int ;
select t.tabid,
(select count(*) from syscolumns c where t.tabid = c.tabid ) ncols
into a,b
from systables t
where tabname = 'systables';

end procedure ;








   201: A syntax error has occurred.
Модификация селекта приводит к нормальному выполнению create procedure.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create procedure test()
define a like systables.tabid ;
define b int ;
select t.tabid
--,(select count(*) from syscolumns c where t.tabid = c.tabid ) ncols
into a--,b
from systables t
where tabname = 'systables';

end procedure ;








 Routine created.
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32827505
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так?

create procedure test()
define a like systables.tabid ;
define b int ;
select t.tabid,
(select count(*) from syscolumns c where t.tabid = c.tabid ) ncols
from systables t
where tabname = 'systables'
into temp a with no log;

end procedure ;

Ну хоть режьте меня, работали вложенные селекты в процедурах. У меня софт кардинально не менялся с 97 года, а там подобных примеров пруд пруди.
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32827522
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaugavaА если так?

create procedure test()
define a like systables.tabid ;
define b int ;
select t.tabid,
(select count(*) from syscolumns c where t.tabid = c.tabid ) ncols
from systables t
where tabname = 'systables'
into temp a with no log;

end procedure ;

А если так - Ok. А select ... into ... from ... нельзя. Хотя, может как раз этого (into temp) и хотел вопрошающий....
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32831500
r2y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
r2y
Гость
Глюк с into явно связан с проверкой синтаксиса (parse) в SPL. Если убрать
предложение into, то парсер предлложит корректировку into temp. Обходной путь связан с изменением into в LET:

create procedure test()
define a like systables.tabid ;
define b int ;
LET a,b = (select t.tabid,
(select count(*) from syscolumns c where t.tabid = c.tabid ) ncols
--into a,b
from systables t
where tabname = 'systables');
end procedure ;

Мелкий недостаток - парсер не проверяет число колонок и при ошибке вы получите runtime error во время работы процедуры.
...
Рейтинг: 0 / 0
Структура Select в хранимой процедуре
    #32831848
Enlighten me
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r2yГлюк с into явно связан с проверкой синтаксиса (parse) в SPL. Если убрать
предложение into, то парсер предлложит корректировку into temp. Обходной путь связан с изменением into в LET:

create procedure test()
define a like systables.tabid ;
define b int ;
LET a,b = (select t.tabid,
(select count(*) from syscolumns c where t.tabid = c.tabid ) ncols
--into a,b
from systables t
where tabname = 'systables');
end procedure ;

Мелкий недостаток - парсер не проверяет число колонок и при ошибке вы получите runtime error во время работы процедуры.
Через let a,b = (select ... почему-то никогда не делал, хотя такая возможность прямо следует из документации (4-54 Informix Guide to SQL: Syntax) и let a = (select... используется повсеместно... . Спасибо, что поправили.

BTW, упомянутый вами "небольшой недостаток" в равной степени относится и к конструкции select ... into ...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Структура Select в хранимой процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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