powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Имя поля, как переменная
7 сообщений из 7, страница 1 из 1
Имя поля, как переменная
    #39445378
morozeckiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, подскажите пожалуйста, как передать имя поля или имя таблицы в функцию переменной?
То есть, есть функция:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE or REPLACE function test(integer, integer[],integer) RETURNS integer AS'
DECLARE
i integer;
BEGIN
UPDATE request SET status= $1 WHERE id = ANY ($2) OR id = $3;
RETURN i;
END;
'LANGUAGE plpgsql



Вот поле статус надо передавать в функцию переменной, как то так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE or REPLACE function test(integer, integer[],integer) RETURNS integer AS'
DECLARE
i integer;
variable text :=$1
BEGIN
UPDATE request SET variable= $1 WHERE id = ANY ($2) OR id = $3;
RETURN i;
END;
'LANGUAGE plpgsql


Ну и $1 = 'status'
...
Рейтинг: 0 / 0
Имя поля, как переменная
    #39445470
grgdvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
morozeckiy,

имя поля передавать как параметр функции и использовать execute immediate для выполнения динамического запроса.
...
Рейтинг: 0 / 0
Имя поля, как переменная
    #39445485
morozeckiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, допер до такой конструкции
Код: plsql
1.
EXECUTE ''UPDATE .request SET ''||column_table ||'' = $1 WHERE  id = ANY($2) OR id = $3'' USING item, req_arr , req;
...
Рейтинг: 0 / 0
Имя поля, как переменная
    #39445493
morozeckiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grgdvo,
Хотя появилась новая проблема. Вот так выглядит функция целиком:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE or REPLACE function test(item integer,  req_arr integer[], req integer, dispatch integer, time_add bigint, column_table text,row_table  text) RETURNS integer AS'
DECLARE
i integer;
BEGIN
EXECUTE ''UPDATE request_to_dispatcher SET ''||column_table ||'' = $1 WHERE  id = ANY($2) OR id = $3'' USING item, req_arr , req;
EXECUTE ''INSERT INTO request_log (id_request,id_user,time,''||row_table||'') VALUES ($3,$4,$5,$1) RETURNING id_log'' INTO i USING req, dispatch, time_add, item;
RETURN i;
END;
'LANGUAGE plpgsql



выдает ошибку error: there is no parameter $5
internalQuery: 'INSERT INTO personal_account.request_log (id_request,id_user,time,id_status) VALUES ($3,$4,$5,$1) RETURNING id_log',
where: 'PL/pgSQL function personal_account.update_req_insert_log(integer,integer[],integer,integer,bigint,text,text) line 7 at EXECUTE statement',

Так было когдая я не использовал USING, но тут то я все указал. Поле в БД bigint
...
Рейтинг: 0 / 0
Имя поля, как переменная
    #39445517
morozeckiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чет я совсем запарился.... VALUES ($3,$4,$5,$1)
...
Рейтинг: 0 / 0
Имя поля, как переменная
    #39445650
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morozeckiyEXECUTE ''INSERT INTO request_log (id_request,id_user,time,''||row_table||'') VALUES ($3,$4,$5,$1) RETURNING id_log'' INTO i USING req, dispatch, time_add, item ;

morozeckiyвыдает ошибку error: there is no parameter $5
...
Рейтинг: 0 / 0
Имя поля, как переменная
    #39445782
grgdvo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
morozeckiy,

у вас $ здесь перечисляет параметры для динамического запроса (которые после using). Их всего 4, Откуда $5 ??
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Имя поля, как переменная
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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