powered by simpleCommunicator - 2.0.43     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Конкатенация в XMLELEMENT
4 сообщений из 4, страница 1 из 1
Конкатенация в XMLELEMENT
    #40140769
ultrasonic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Пишу функцию, где к наименованию элемента должно добавляться значение префикса из входного параметра:
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE FUNCTION public.get_simple_xml(iValue numeric
                                              , iPrefix character varying DEFAULT ''::character varying)
 RETURNS xml
 LANGUAGE plpgsql
 IMMUTABLE
AS $function$
declare
  lResult XML;
begin
  select
    XMLELEMENT (NAME iPrefix||'elem', iValue)
    INTO lResult
  from dual;
  RETURN lResult;
end; $function$;
Функция не компилируется. Получаю ошибку:
Цитата 
[игнорируется]
SQL Error [42601]: ОШИБКА: ошибка синтаксиса (примерное положение: "||")
Позиция: 302
Написал второй вариант:
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION public.get_simple_xml(iValue numeric
                                              , iPrefix character varying DEFAULT ''::character varying)
 RETURNS xml
 LANGUAGE plpgsql
 IMMUTABLE
AS $function$
declare
  lResult XML;
  lName varchar(200);
begin
  lName := iPrefix||'elem';
  select
    XMLELEMENT (NAME lName, iValue)
    INTO lResult
  from dual;
  RETURN lResult;
end; $function$;
Но при вызове:
Код: PL/pgSQL
1.
select get_simple_xml(234, 'abc');
Вместо:
Код: XML
1.
<abcelem>234</abcelem>
Получаю:
Код: XML
1.
<lname>234</lname>
Как сделать, чтобы функция выполняла требуемое?
...
Рейтинг: 0 / 0
Конкатенация в XMLELEMENT
    #40140782
ultrasonic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант с использованием функции concat тоже не компилируется:
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE FUNCTION public.get_simple_xml(iValue numeric
                                              , iPrefix character varying DEFAULT ''::character varying)
 RETURNS xml
 LANGUAGE plpgsql
 IMMUTABLE
AS $function$
declare
  lResult XML;
begin
  select
    XMLELEMENT (NAME concat(iPrefix,"elem"), iValue)
    INTO lResult
  from dual;
  RETURN lResult;
end; $function$;
Цитата 
[игнорируется]
SQL Error [42601]: ОШИБКА: ошибка синтаксиса (примерное положение: "(")
Позиция: 301
...
Рейтинг: 0 / 0
Конкатенация в XMLELEMENT
    #40140792
CerebroSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ultrasonic [игнорируется] 

В данном случаи нужно использовать вариант с execute + format

CREATE OR REPLACE FUNCTION public.get_simple_xml(iValue numeric
, iPrefix character varying DEFAULT ''::character varying)
RETURNS xml
LANGUAGE plpgsql
IMMUTABLE
AS
$function$
declare
lResult XML;
begin
execute format('SELECT xmlelement(name %I, $1)', concat(iPrefix,'elem')) USING iValue INTO lResult;
RETURN lResult;
end;
$function$;
...
Рейтинг: 0 / 0
Конкатенация в XMLELEMENT
    #40140794
ultrasonic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CerebroSQL [игнорируется] 

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


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