APEX 5: чтение таблицы в текстовой области

У меня есть таблица, которая выглядит примерно так.

 `referenceID, IP1, IP2, IP3, subnetmask`

Теперь мне нужно получить IP-адреса с определенными ссылочными идентификаторами в поле Textarea или Displayonly, добавив простой текст до и после

Например:

*/ 
*/this goes infront of the ips  
<ip1><ip2><ip3><subnet> 
<2ip1><2ip2><2ip3><2subnet>  
*/this text comes after the ips`

Проблема в том, что я не могу придумать, как выбрать все строки и ips в текстовой области (или только для отображения).

Методы, которые я пробовал до сих пор, просто вызывают ошибки, такие как "неправильное количество столбцов" или PL/SQL, запрашивая у меня место для выбора этих INTO где-нибудь.

Буду признателен за любое решение или помощь.

1 ответ

Вы можете попробовать вот так (основываясь на этом ответе):

SELECT 'this goes infront of the ips' || 
       replace(SYS_CONNECT_BY_PATH (x_text, '~'), '~', CHR(10)) ||
       CHR(10) || 'this text comes after the ips' AS textarea
  FROM (SELECT IP1 || ',' || IP2 || ',' || IP3 || ',' || subnetmask AS x_text,
               ROW_NUMBER () OVER (ORDER BY referenceID) AS x_rownumber,
               COUNT (*) OVER () AS x_count
          FROM yourtable
          WHERE referenceID > 0)
WHERE x_rownumber = x_count
START WITH x_rownumber = 1
CONNECT BY x_rownumber = PRIOR x_rownumber + 1

Если вы используете Oracle 11.2 или выше, вы должны использовать следующее (на основе другого ответа):

SELECT 'this goes infront of the ips' || CHR(10) ||
       LISTAGG(IP1 || ',' || IP2 || ',' || IP3 || ',' || subnetmask, CHR(10)) 
       WITHIN GROUP (ORDER BY referenceID) ||
       CHR(10) || 'this text comes after the ips' AS textarea
FROM yourtable
WHERE referenceID > 0

Замечания: referenceID > 0 это просто пример условия для ограничения вашего запроса конкретными ссылочными идентификаторами, и yourtable следует заменить на название таблицы.

Другие вопросы по тегам