powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как передать параметр таблицы в insert ?
10 сообщений из 10, страница 1 из 1
Как передать параметр таблицы в insert ?
    #39383992
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[quote автор]Имя таблицы передается а функцию как входной параметр.
 Как передать этот же параметр(имя таблицы) в insert ?

CREATE or REPLACE FUNCTION lookup_letter4(text) RETURNS SETOF text AS $$
declare v_pk TEXT;
BEGIN
v_pk :='SELECT a.attname::text FROM   pg_index i
 JOIN   pg_attribute a ON a.attrelid = i.indrelid
                     AND a.attnum = ANY(i.indkey)
  where i.indrelid ='''||$1||'''::regclass limit 1'; 

IF v_pk in ('code','name') then 
execute 'INSERT INTO' ||$1|| '(code, name)
  --  VALUES (''-1'',''не задано'');';
END IF;
END;
$$ LANGUAGE plpgsql;

SELECT lookup_letter4('unsi_addons.aspr_boundary_type');[/quote]
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384060
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как передать этот же параметр(имя таблицы) в insert ?
Код: plsql
1.
2.
3.
4.
CREATE or REPLACE FUNCTION lookup_letter4(text) RETURNS SETOF text AS $$
...
execute 'INSERT INTO' ||quote_ident($1)|| '(code, name)
...
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384111
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузанов,
не помогло
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384112
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE or REPLACE FUNCTION lookup_letter4(text) RETURNS SETOF text AS $$
declare v_pk TEXT;
BEGIN
v_pk :='SELECT a.attname::text FROM   pg_index i
 JOIN   pg_attribute a ON a.attrelid = i.indrelid
                     AND a.attnum = ANY(i.indkey)
  where i.indrelid ='''||$1||'''::regclass limit 1'; 

IF v_pk in ('code','name') then 
execute 'INSERT INTO' ||qoute_ident($1)|| '(code, name)
  VALUES (''-1'',''не задано'');';
END IF;
END;
$$ LANGUAGE plpgsql; 
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384114
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE or REPLACE FUNCTION lookup_letter4(text) RETURNS SETOF text AS $$
declare v_pk TEXT;
BEGIN
v_pk :='SELECT a.attname::text FROM   pg_index i
 JOIN   pg_attribute a ON a.attrelid = i.indrelid
                     AND a.attnum = ANY(i.indkey)
  where i.indrelid ='''||$1||'''::regclass limit 1'; 

IF v_pk in ('code','name') then 
execute 'INSERT INTO' ||quote_ident($1)|| '(code, name)
  VALUES (''-1'',''не задано'');';
END IF;
END;
$$ LANGUAGE plpgsql; 
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384184
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему пред.вариант не рабочий?

Отработал, если переписать вот так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE or REPLACE FUNCTION lookup_letter4(text) RETURNS SETOF text AS $$
declare v_pk TEXT;
BEGIN
SELECT a.attname::text FROM   pg_index i
 JOIN   pg_attribute a ON a.attrelid = i.indrelid
                     AND a.attnum = ANY(i.indkey)
  where i.indrelid =$1::regclass limit 1 into v_pk ; 

IF v_pk in ('code','name') then 
execute 'INSERT INTO ' ||$1|| '( code, name )
  VALUES (-1,''не задано'');';
END IF;
END;
$$ LANGUAGE plpgsql; 
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384191
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

Можете выводить RAISE NOTICE, чтобы проверить текст получившегося INSERT-запроса.

Пробел пропустили?
Код: plaintext
1.
2.
3.
execute 'INSERT INTO ' ||quote_ident($1)|| '(code, name)
                    ^
                    |
                    |

Рекомендуют использовать format() и %I.
https://www.postgresql.org/docs/9.6/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384198
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat,
Да пробел.
Спасибо!
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39384948
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

как бы это антипаттерн, bad practice, Если тебе приходится так делать.

Слей все таблицы в одну, добавив в PK тип записи.
...
Рейтинг: 0 / 0
Как передать параметр таблицы в insert ?
    #39385893
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
Спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как передать параметр таблицы в insert ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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