powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / имя таблицы как параметр для PL/pgSQL
4 сообщений из 4, страница 1 из 1
имя таблицы как параметр для PL/pgSQL
    #32295293
Vitallium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли в Postgres в PL/pgSQL в качестве параметра передавать имя таблицы ? В хранимой процедуре должен быть прописан запрос, в котором имя таблицы заранее неизвестно, а передаётся функции в качестве параметра.
Я пробовал так, но Postgres ругается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create function myfunc(text) returns int4 as
'declare
  tablename alias for $1;
  result int4;
 begin
  result:=(select count(*) from tablename);
  return(result);
 end;
'language 'plpgsql'
...
Рейтинг: 0 / 0
имя таблицы как параметр для PL/pgSQL
    #32295560
Stellar.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет
...
Рейтинг: 0 / 0
имя таблицы как параметр для PL/pgSQL
    #32295570
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create function myfunc(text) returns int4 as
'declare
  tablename alias for $1;
  result int4;
 begin
  result:=execute ''select count(*) from '' || quote_ident(tablename);
  return(result);
 end;
'language 'plpgsql'
...
Рейтинг: 0 / 0
имя таблицы как параметр для PL/pgSQL
    #32295654
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sad Spirit Нет так тоже не получится!
Почти правильно так :
create or replace function myfunc(text) returns int4 as
' declare tablename alias for $1;
DECLARE tmprec RECORD;
declare res1 int4;
begin
execute ''select count(*) as cnt into tmprec from '' || quote_ident(tablen
res1 :=tmprec.cnt;
return(res1);--tmp_record.cnt
end;
'language 'plpgsql'
Но почти- несчитается потому что почти это тоже ошибка 8))
Смотрите сами :
myfunc1 - вариант предложенный Sad Spirit
myfunc - приведенный в этом посте.
avalon|R1>psql -q -c "select myfunc1('classes') " tests
WARNING: Error occurred while executing PL/pgSQL function myfunc1
WARNING: line 9 at assignment
ERROR: Type "execute" does not exist
---------------------------------------------------------------------------------------------------------
avalon|R1>psql -q -c "select myfunc('classes') " tests
WARNING: Error occurred while executing PL/pgSQL function myfunc
WARNING: line 5 at execute statement
ERROR: EXECUTE of SELECT ... INTO is not implemented yet
Кабы этот чертов форум так не глючил .....
А вообще в доке написано
The results from SELECT queries are discarded by EXECUTE, and SELECT INTO is not currently supported within EXECUTE. So, the only way to extract a result from a dynamically-created SELECT is to use the FOR-IN-EXECUTE form described later.
Те придется считать записи в цикле FOR .... что тоже не ахти.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / имя таблицы как параметр для PL/pgSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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