Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SELECT INTO ... plpgsql / 8 сообщений из 8, страница 1 из 1
28.03.2014, 13:18:05
    #38599100
_usa__83_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
День добрый!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 Есть:
 
 CREATE FUNCTION func() RETURNS SETOF character AS $$
 BEGIN
 RETURN NEXT 'bla-bla-1';
 RETURN NEXT 'bla-bla-2';
 END;
 $$ LANGUAGE plpgsql;

 В другой функции ...

 ...
 DECLARE
  a1 character;
  a2 character;
 BEGIN
 SELECT func() INTO a1, a2;
 RAISE NOTICE 'first - %', a1;
 RAISE NOTICE 'second - %', a2;
 END;
 $$ LANGUAGE plpgsql;
 



Дает:
в первом выводе два значения в виде (bla-bla-1, bla-bla-2)
во втором - <NULL>

Такой вопрос а как распихать по двум переменным ?
Пасиба
...
Рейтинг: 0 / 0
28.03.2014, 13:38:00
    #38599131
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
_usa__83_День добрый!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 Есть:
 
 CREATE FUNCTION func() RETURNS SETOF character AS $$
 BEGIN
 RETURN NEXT 'bla-bla-1';
 RETURN NEXT 'bla-bla-2';
 END;
 $$ LANGUAGE plpgsql;

 В другой функции ...

 ...
 DECLARE
  a1 character;
  a2 character;
 BEGIN
 SELECT func() INTO a1, a2;
 RAISE NOTICE 'first - %', a1;
 RAISE NOTICE 'second - %', a2;
 END;
 $$ LANGUAGE plpgsql;
 



Дает:
в первом выводе два значения в виде (bla-bla-1, bla-bla-2)
во втором - <NULL>

Такой вопрос а как распихать по двум переменным ?
Пасиба
ткните пальцем в строку, являющуюся в вашем понимании той самой инструкцией, чей вывод у вас "первый".

а то мне её что-то не видно.
или она у вас такая скромная ?

ps имеет ли дон понимание, чем SELECT f_() отличается от SELECT * FROM f_()/
...
Рейтинг: 0 / 0
28.03.2014, 13:59:24
    #38599156
_usa__83_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
qwwq,

По порядку, с конца:

- да "Дон" не понимает разницы, догадывается, но еще не понимает ...
- насчет скромности, - не выяснял, и вряд ли удастся ...
- тык:
Код: sql
1.
RAISE NOTICE 'first - %', a1;



ну а если без лишнего словоблудства, то вопрос можно сформулировать так:

каким образом можно получить значения возвращаемых значений вызываемой функции и распихать их по переменным в вызывающей функции?
...
Рейтинг: 0 / 0
28.03.2014, 14:33:24
    #38599217
Sasha Alias
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE FUNCTION func(OUT o_a1 character, OUT o_a2 character) RETURNS record AS $$
BEGIN
  o_a1 = 'bla-bla-1';
  o_a2 = 'bla-bla-2';
END;
$$ LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
28.03.2014, 14:58:57
    #38599249
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
_usa__83_qwwq,

По порядку, с конца:

- да "Дон" не понимает разницы, догадывается, но еще не понимает ...
- насчет скромности, - не выяснял, и вряд ли удастся ...
- тык:
Код: sql
1.
RAISE NOTICE 'first - %', a1;



ну а если без лишнего словоблудства, то вопрос можно сформулировать так:

каким образом можно получить значения возвращаемых значений вызываемой функции и распихать их по переменным в вызывающей функции?
http://www.postgresql.org/docs/current/static/sql-select.html

см: "where from_item can be one of:"
и расшифровку ниже:
автор
Код: plaintext
1.
2.
function_name

    Function calls can appear in the FROM clause... 


т.е. буквально, SELECT function(); возвращает вам одно поле [с комплексным типом, если out
параметров много), которое потом конечно можно раскрыть, но зачем.
а SELECT * FROM function(); -- все поля возврата, если они объявлены в шапке ф-ии в out или returns table () формате.
...
Рейтинг: 0 / 0
28.03.2014, 15:16:43
    #38599268
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
был не прав. вообще не прочитал что вы там делаете в 1-й.

вам наддо как саша запихать 2 поля в возврат, и поиметь их в SELECT ... INTO
(думал у вас так и написано, как у , и вы не умеете из него получить оба поля разом)


или бегать по setof-у FOR LOOP конструкцией.
...
Рейтинг: 0 / 0
28.03.2014, 15:20:33
    #38599274
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
qwwq...или бегать по setof-у FOR LOOP конструкцией.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
BEGIN;

CREATE FUNCTION func() RETURNS SETOF varchar AS $$
 BEGIN

	 RETURN NEXT 'bla-bla-1';
	 RETURN NEXT 'bla-bla-2';
	 RETURN NEXT 'bla-bla-3';
END;
$$ LANGUAGE plpgsql;

DO
$do$
DECLARE
  _r varchar; --record;
  _i int4:=0;
 BEGIN
	 FOR _r IN
		SELECT func()  
	 LOOP
		_i=_i+1;
		RAISE NOTICE '_i - %, _r %'	,_i, _r; 
	END LOOP;
 END;
 $do$ LANGUAGE plpgsql;
 
ROLLBACK;
/*
ЗАМЕЧАНИЕ:  _i - 1, _r bla-bla-1
ЗАМЕЧАНИЕ:  _i - 2, _r bla-bla-2
ЗАМЕЧАНИЕ:  _i - 3, _r bla-bla-3
*/
...
Рейтинг: 0 / 0
28.03.2014, 15:31:45
    #38599292
_usa__83_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT INTO ... plpgsql
qwwq, Sasha Alias

Да, пасиба, работает ... по переменным раскладывает ...
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SELECT INTO ... plpgsql / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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