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

ORACLE SQL LISTAGG nie zwraca oczekiwanego wyniku

Wydaje się, że jest to związane z błędem 19461687 i poprzednim pytaniem . Jeśli zrzucisz zagregowaną wartość z zapytania w 11gR2 lub 12cR1, zobaczysz:

LISTAGG_OUTPUT
--------------------------------------------------------------------------------------------------
Typ=1 Len=25 CharacterSet=AL32UTF8: 0,41,0,52,0,34,0,30,0,30,0,31,2c,0,41,0,52,0,34,0,30,0,30,0,32

W SQL*Plus i SQL Developer rzeczywista wartość jest wyświetlana jako:

LISTAGG_OUTPUT
----------------------------------------
 A R 4 0 0 1, A R 4 0 0 2

i nie można skopiować wartości z SQL Developer. (W 12cR2 zera nie pojawiają się już w zrzucie, wartość jest wyświetlana bez odstępów i można ją skopiować, więc wydaje się, że błąd został naprawiony.)

Wydaje się, że te bajty null powodują, że Ropuch w ogóle nie wyświetla wartości, prawdopodobnie dlatego, że widzi pierwszy bajt null i traktuje go jako terminator łańcucha (lub coś w tym stylu).

SQL Fiddle wydaje się sobie z tym radzić, ale db<>fiddle również wydaje się mieć z tym problem i nie zwraca niczego dla całych skrzypiec, gdy to zapytanie jest obecne.

Możesz przedefiniować kolumnę tabeli jako varchar2 zamiast nvarchar2 , ale zakładam, że jest to ten typ danych z jakiegoś powodu, więc prawdopodobnie nie jest to praktyczne.

Możesz więc przesłać go jako część zapytania:

SELECT LISTAGG(CAST(MOD_CODE AS VARCHAR2(12)),',')
  WITHIN GROUP (ORDER BY MOD_CODE) LISTAGG_OUTPUT
FROM XOTEST_A
WHERE MOD_CODE IN ('AR4001','AR4002');

LISTAGG_OUTPUT
----------------------------------------
AR4001,AR4002

Lub sprawdź, czy łatka błędu 19461687 rozwiąże problem za Ciebie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonywanie dynamicznej instrukcji sql do SYS_REFCURSOR

  2. Zapytanie aktualizujące Oracle SQL aktualizuje wartości tylko wtedy, gdy są one puste

  3. Wstawianie do Oracle i pobieranie wygenerowanego identyfikatora sekwencji

  4. Problem z obliczaniem tygodnia Oracle

  5. Potrzebujesz pomocy z połączeniem z bazą danych i kodem zapytania