Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / select column1, column2 from table(...) / 4 сообщений из 4, страница 1 из 1
13.11.2009, 12:51
    #36309012
select column1, column2 from table(...)
Приветствую всех.

Есть такая функция
Код: plaintext
1.
2.
3.
4.
create function f () returning 
			integer as col1,
			integer as col2;
	return  1 ,  2 ;
end function;
Как сделать, чтобы можно было примерно так:
Код: plaintext
select col1, col2 from table(f ()) 
а не так:
Код: plaintext
select * from  table(f ()) 
?
...
Рейтинг: 0 / 0
13.11.2009, 13:40
    #36309201
Тан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select column1, column2 from table(...)
Автор c таким именемПриветствую всех.

Есть такая функция
Код: plaintext
1.
2.
3.
4.
create function f () returning 
			integer as col1,
			integer as col2;
	return  1 ,  2 ;
end function;
Как сделать, чтобы можно было примерно так:
Код: plaintext
select col1, col2 from table(f ()) 
а не так:
Код: plaintext
select * from  table(f ()) 
?
как-то так
Код: plaintext
select col1, col2 from table(f ()) as table1(col1,col2) 
...
Рейтинг: 0 / 0
13.11.2009, 15:45
    #36309602
select column1, column2 from table(...)
О как хитро. Спасибо.
...
Рейтинг: 0 / 0
17.11.2009, 12:45
    #36314635
Kozhina Lidia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select column1, column2 from table(...)
-- поэкспериментировав, докладываю:
-- для 9.40.FC3


--1. если возвращается один параметр, то можно через MULTISET
drop function f;
create function f () returning
integer as col1;
return 1 ;
end function;
--SELECT * FROM TABLE(FUNCTION f()) AS t1(col1); -- -9786 SQL error: SLV's not allowed in the from clause.
SELECT * FROM TABLE(SET{ f()}) AS t1(col1) ; -- работает
SELECT * FROM TABLE(MULTISET{ f()}) AS t1(col1); -- работает

--2. если возвращается один параметр with resume, то можно через FUNCTION
drop function f;
create function f () returning
integer as col1;
return 1 with resume;
end function;
SELECT * FROM TABLE(FUNCTION f()) AS t1(col1); -- работает
--SELECT * FROM TABLE(SET{ f()}) AS t1(col1) ; -- -686 SQL error: Function (owner.f) has returned more than one row.
--SELECT * FROM TABLE(MULTISET{ f()}) AS t1(col1);


--3. если возвращается несколько параметров, то:
drop function f;
create function f () returning
integer as col1,
integer as col2;
return 1,2 ;
end function;
--SELECT * FROM TABLE(FUNCTION f()) AS t1(col1,col2); -- -9786 SQL error: SLV's not allowed in the from clause.
--SELECT * FROM TABLE(SET{ f()}) AS t1(col1,col2) ; -- -684 SQL error: Function (owner.f) returns too many values.
--SELECT * FROM TABLE(MULTISET{ f()}) AS t1(col1,col2); -- -684 SQL error: Function (owner.f) returns too many values.

-- поэтому в случае с несколькими возвращаемыми параметрами, возможно только если возвращается with resume
-- даже если это одна строчка
drop function f;
create function f () returning
integer as col1,
integer as col2;
return 1,2 with resume;
end function;
SELECT col2 FROM TABLE(FUNCTION f()) AS t1(col1,col2);
SELECT col2, col1*10 FROM TABLE(FUNCTION f()) AS t1(col1,col2);
--SELECT * FROM TABLE(SET{ f()}) AS t1(col1,col2) ; -- -684 SQL error: Function (owner.f) returns too many values.
--SELECT * FROM TABLE(MULTISET{ f()}) AS t1(col1,col2);
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / select column1, column2 from table(...) / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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