Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:Конкатенацията на низ е твърде дълга

Можете да използвате COLLECT() функция за да обедините низовете в колекция и след това да използвате дефинирана от потребителя функция за свързване на низовете:

Настройка на Oracle :

CREATE TYPE stringlist IS TABLE OF VARCHAR2(4000);
/

CREATE FUNCTION concat_List(
  strings IN stringlist,
  delim   IN VARCHAR2 DEFAULT ','
) RETURN CLOB DETERMINISTIC
IS
  value CLOB;
  i     PLS_INTEGER;
BEGIN
  IF strings IS NULL THEN
    RETURN NULL;
  END IF;
  value := EMPTY_CLOB();
  IF strings IS NOT EMPTY THEN
    i := strings.FIRST;
    LOOP
      IF i > strings.FIRST AND delim IS NOT NULL THEN
        value := value || delim;
      END IF;
      value := value || strings(i);
      EXIT WHEN i = strings.LAST;
      i := strings.NEXT(i);
    END LOOP;
  END IF;
  RETURN value;
END;
/

Заявка :

SELECT Iav.Item_Id AS Attr_Item_Id,
       CONCAT_LIST(
         CAST(
           COLLECT(
             La.Attribute_Name || '|~|' || Lav.Attribute_Value ||' '|| Lau.Attribute_Uom
             ORDER BY ICA.DISP_SEQ,LA.ATTRIBUTE_NAME
           )
           AS stringlist
         ),
         '}~}'
       ) AS ATTR
FROM   your_table
GROUP BY iav.item_id;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да дефинирате първичен ключ за автоматично увеличение в Oracle

  2. Как да промените началната стойност на db последователността

  3. Oracle обединява константите в една таблица

  4. Oracle създава таблица като избрано с условие за максимален брой

  5. java.sql.SQLException:невалидни аргументи в повикването