Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle :konkatenacja ciągów jest za długa

Możesz użyć COLLECT() funkcja aby zagregować ciągi w kolekcję, a następnie użyć funkcji zdefiniowanej przez użytkownika, aby połączyć ciągi:

Konfiguracja 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;
/

Zapytanie :

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. Jak mogę wstawić do kolumny BLOB z instrukcji INSERT w sqldeveloper?

  2. aktualizacja oświadczenia Oracle nie działa

  3. Instrukcja aktualizacji w procedurze składowanej Oracle nie działa

  4. Jak utworzyć bufor do pliku w formacie CSV przy użyciu SQLPLUS?

  5. Nieprawidłowy numer Oracle w klauzuli