sql >> Databáze >  >> RDS >> Oracle

Funkce Oracle:Replikujte wm_concat

Zobrazuje se vám chybová zpráva, když používáte wm_concat? Na rozdíl od funkcí jako to_char je ve vlastnictví wmsys a možná budete muset použít wmsys.wm_concat, abyste jej mohli používat. (samozřejmě pokud nevytvoříte potřebná synonyma).

Nyní k samotné otázce

Tato technika se nazývá agregace řetězců.

Můžete zde najít spoustu dalších alternativ.

http://www.oracle-base.com/articles/ 10g/StringAggregationTechniques.php Pro jiné metody vyhledejte „stragg“ na http://asktom.oracle.com Další užitečný odkaz:http://www.orafaq.com/node/2290

Toto je pravděpodobně nejpoužívanější. Mnoho týmů píše své vlastní funkce, které víceméně dělají totéž.

CREATE OR REPLACE FUNCTION get_employees (p_deptno  in  emp.deptno%TYPE)
  RETURN VARCHAR2
IS
  l_text  VARCHAR2(32767) := NULL;
BEGIN
  FOR cur_rec IN (SELECT ename FROM emp WHERE deptno = p_deptno) LOOP
    l_text := l_text || ',' || cur_rec.ename;
  END LOOP;
  RETURN LTRIM(l_text, ',');
END;
/
SHOW ERRORS

i když toto řešení funguje pro varchar2 a číslo, nejlepší obecné řešení lze vytvořit pomocí rozhraní Oracle ODCIAggregate.

http://download-west .oracle.com/docs/cd/B14117_01/appdev.101/b10800/dciaggfns.htm#sthref462

Implementace pro totéž je na prvním odkazu výše na www.oracle-base.com



  1. Klauzule FROM nezbytná v každém příkazu SELECT

  2. Mysql dynamicky vytváří řetězec dotazu v uložené proceduře založené na logice

  3. Jak spustit a nakonfigurovat ProxySQL 2.0 pro MySQL Galera Cluster na Dockeru

  4. CHYBA:funkce unnest(integer[]) v postgresql neexistuje