Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :(( / 13 сообщений из 13, страница 1 из 1
24.09.2004, 15:53
    #32710735
ChaM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
в функцию передаётся имя таблицы..
CREATE OR REPLACE FUNCTION function1(varchar) RETURNS integer AS'
DECLARE
table_name ALIAS FOR $1;
sql_query varchar;
qwer INTEGER;
BEGIN
-- Хочется так сделать
select INTO qwer column1 FROM table_name LIMIT 1;
-- естесно нехочет так
-- если по другому
EXECUTE ''select INTO qwer column1 FROM '' || table_name || '' LIMIT 1'';
--тоже ругается что ошибка рядом с into
return 1;
END
' LANGUAGE 'plpgsql'

Как можно разрешить этот трабл ... временно сделал геморойный вариант, но ИМХО он карявый:

.........
row_data RECORD
...........
FOR row_data IN EXECUTE ''select column1 FROM '' || table_name || '' LIMIT 1'' LOOP
qwer:=row_data.column1;
END LOOP;
...
Рейтинг: 0 / 0
24.09.2004, 18:34
    #32711125
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
проверил. В 7.3.4 работают по крайней мере две разновидности синтаксиса
Код: plaintext
1.
2.
select "name" INTO "qwer" FROM test LIMIT  1 
или
select test.name INTO "qwer"  LIMIT  1   
но вашей среди них точно нет. т.ч. проблема не в EXECUTE
...
Рейтинг: 0 / 0
24.09.2004, 19:33
    #32711214
centur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
4321проверил. В 7.3.4 работают по крайней мере две разновидности синтаксиса
Код: plaintext
1.
2.
select "name" INTO "qwer" FROM test LIMIT  1 
или
select test.name INTO "qwer"  LIMIT  1   
но вашей среди них точно нет. т.ч. проблема не в EXECUTE


Хмм, это афаик вы батенька таблицы создаете на основе селекта, а человеку другое надо

По теме - вот уже почти год мы решаем у себя эту корявость именно так как и вы придумали. Найдете правильный и красивый способ - киньте в аську 864050 - займусь рефакторингом всего проекта с удовольствием, т.к. пока самого коробит.
...
Рейтинг: 0 / 0
24.09.2004, 20:18
    #32711264
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
centur 4321проверил. В 7.3.4 работают по крайней мере две разновидности синтаксиса
Код: plaintext
1.
2.
select "name" INTO "qwer" FROM test LIMIT  1 
или
select test.name INTO "qwer"  LIMIT  1   
но вашей среди них точно нет. т.ч. проблема не в EXECUTE


Хмм, это афаик вы батенька таблицы создаете на основе селекта, а человеку другое надо

По теме - вот уже почти год мы решаем у себя эту корявость именно так как и вы придумали. Найдете правильный и красивый способ - киньте в аську 864050 - займусь рефакторингом всего проекта с удовольствием, т.к. пока самого коробит.

не понял, объясните дураку, что мешает вместо
Код: plaintext
EXECUTE ''select INTO qwer column1 FROM '' || table_name || '' LIMIT  1 '';
писать конструкцию
Код: plaintext
1.
EXECUTE ''select column1 INTO qwer  FROM '' || table_name || '' LIMIT  1 '';
или я опять не так понимаю?
тогда разжуйте.
...
Рейтинг: 0 / 0
25.09.2004, 20:02
    #32711674
Shweik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
Эта ссылка у меня лежит уже года три в разделе "EXECUTE SELECT INTO"
http://archives.postgresql.org/pgsql-admin/2001-12/msg00067.php
А все по-прежнему - EXECUTE of SELECT ... INTO is not implemented yet

Только неправильно пишете
EXECUTE ''select INTO qwer column1 FROM '' || table_name || '' LIMIT 1'';
Нужно вот так
EXECUTE ''select INTO qwer column1 FROM '' || quote_ident(table_name) || '' LIMIT 1'';
Вот тогда и получаем тему для TODO.....
...
Рейтинг: 0 / 0
01.03.2005, 13:33
    #32938594
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
Вот и я допер, что жа нужно было человику.
Пробовал даже че-то наподобь:
SELECT INTO vd value FROM (EXECUTE ssql) AS q ;
(понятно, ша хлюпо - внешний селект не должен содержать экзекьюта - либо долже быть сам исполняться динамицки. Т.е. приходим к исходной.)

Получаица, кроме FOR ... IN EXECUTE ... LOOP; или курсора задача не решаица.
...
Рейтинг: 0 / 0
01.03.2005, 14:13
    #32938722
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
Может так как-то?
CREATE OR REPLACE FUNCTION select_by_tabname(varchar) RETURNS setof record
AS'
declare row_data record;
BEGIN
FOR row_data IN EXECUTE ''select * FROM '' || table_name || LOOP
return next row_data;
END LOOP
END
' LANGUAGE 'plpgsql'


Дальше всю оставшуюся жизнь юзаем её:

select INTO qwer column1 FROM select_by_tabname(table_name) LIMIT 1;

Так как postgres только дома, грамматику и жизнеспособность проверить не могу
...
Рейтинг: 0 / 0
01.03.2005, 14:14
    #32938727
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
table_name || LOOP
в смысле
table_name LOOP
...
Рейтинг: 0 / 0
02.03.2005, 03:29
    #32940024
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
Соседним топиком навеяло - через глобальные переменные можно чуть проще чем FOR LOOP сделать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create or replace  function get_var_int(varname text) returns int as '
 return $vi{$_[0]};
' language plperl;

create or replace  function set_var_int(varname text, value int) returns text as '
 return $vi{$_[0]} = $_[1];
' language plperl;

CREATE OR REPLACE FUNCTION function1(varchar, varchar) RETURNS integer AS'
DECLARE
table_name ALIAS FOR $1;
field_name ALIAS FOR $2;
qwer INTEGER;
BEGIN
  EXECUTE(''select set_var_int(''''tmp'''', ''||field_name||'') FROM ''||table_name||'' LIMIT 1'');
  qwer := get_var_int(''tmp'');
  RETURN qwer;
END
' LANGUAGE plpgsql;

select function1('pg_user', 'usesysid');
...
Рейтинг: 0 / 0
02.03.2005, 11:04
    #32940486
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
фффф глобальные переменные...
Код: plaintext
1.
2.
3.
...
' language plperl;
...

Хммм. теперь я понял, к чему это меня букварь по перлу поперло купить. Правда читать пока не перло.

Кстати, как язык (plperl) ставится в случае установки из инстоллера?
...
Рейтинг: 0 / 0
02.03.2005, 11:30
    #32940562
Niemi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
тока вчера установил postgresql8.0.1 на Windows XP никакого plperl там после установки нету. Самому интересно, как сделать так что б появился. Может где дока есть?
--
интересно у вас тут
...
Рейтинг: 0 / 0
02.03.2005, 12:58
    #32940879
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
Niemiтока вчера установил postgresql8.0.1 на Windows XP никакого plperl там после установки нету. Самому интересно, как сделать так что б появился. Может где дока есть?

Возможно галочку при установке не поставил. А может инсталлятор не нашел установленный в системе перл и галку засерил. Сам перл точно установлен и в PATH прописан?
...
Рейтинг: 0 / 0
02.03.2005, 13:14
    #32940944
Niemi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :((
да точно, было у меня такое подозрение. менюшка с допольнительными настройками проскочила. в /lib лежит plperl.dll но вот как прицепить её ручками ... тут ума не приложу при создании через createlang
Код: plaintext
1.
2.
3.
4.
5.
6.
C:\webs\PostgreSQL8. 0 . 1 \bin>createlang plperlu --pglib=c:/webs/PostgreSQL8.0.1/l
ib -d temp -U postgres
createlang: language installation failed: ERROR:  could not load library "c:/web
s/PostgreSQL8.0.1/lib/plperl.dll": dynamic load error
и 
error "This application has failed to start because perl58.dll was not found Re-installing this application may fix this problem"
вообщем буду пробовать переставлять. только вот комп новый получу.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / вопрос: SELECT into local_var column_name FROM <имя таблицы как параметр фукнкции> ? С EXECUTE это не проходит :(( / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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