powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как передать текст в функцию
3 сообщений из 3, страница 1 из 1
Как передать текст в функцию
    #39673606
Alewteena1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите кто-нибудь, разобраться с такой задачей.
Есть функция f_test_upd
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE FUNCTION public.f_test_upd(
    fkey integer,
    t1 text DEFAULT NULL::text,
    t2 text DEFAULT NULL::text,
    t3 text DEFAULT 'inuse'::text,
    i4 integer DEFAULT NULL::integer)
  RETURNS integer AS
$BODY$
begin
UPDATE public.vl
   SET vlname=t1, vldesc=t2, tstatus=t3, volt=i4
 WHERE id=fkey;
return fkey;
end;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

, которая имеет много аргументов разных типов, и функция f_test
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR REPLACE FUNCTION public.f_test(t1 text DEFAULT NULL::text)
  RETURNS integer AS
$BODY$

declare fkey integer;
declare iout integer;
begin
fkey = (SELECT id + 1 FROM vl ORDER BY id desc LIMIT 1);
if fkey is null then fkey = 1; 
end if;


INSERT INTO vl(id)
    VALUES (fkey); 
EXECUTE 'PERFORM f_test_upd(' || fkey || ',' || t1 || ');' INTO iout;
  
return fkey;
end;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;


с 1 аргументом типа текст, которая вызывает предыдущую. Я хотела передавать в нее аргументы одной строкой:
SELECT public.f_test(''arg1', 'arg2', 'agr3', 4'::text);
Эта запись, конечно же выдает синтаксическую ошибку, но если тут сделать без синт.ошибки (SELECT public.f_test('arg1, arg2, agr3, 4');), то на этапе выполнения функции f_test_upd будет такая ошибка.
Код: plsql
1.
2.
ERROR:  syntax error at or near "PERFORM"
LINE 1: PERFORM f_test_upd(10,arg1, arg2, agr3, 4);


Этот метод не работает из-за кавычек, я не смогла подставить одинарные кавычки в одинарные кавычки.
В результате нужно, чтобы одна функция добавляла строку, а другая ее обновляла... Или надо как-то совсем по-другому делать?
Аргументов в итоге будет около 25, которые нужно обновлять
...
Рейтинг: 0 / 0
Как передать текст в функцию
    #39673634
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alewteena1,

perform - это конструкция plpgsql. В sql её нет, потому execute, который хочет получить sql - не понимает, что вы от него хотите.

Alewteena1Я хотела передавать в нее аргументы одной строкой:
SELECT public.f_test(''arg1', 'arg2', 'agr3', 4'::text);
Зачем?

Передавайте какую-либо нормальную структуру. Композитного типа, или хотя бы json или hstore какой.
...
Рейтинг: 0 / 0
Как передать текст в функцию
    #39673641
Alewteena1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,

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


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