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

ORACLE SQL LISTAGG не връща очакван резултат

Това изглежда е свързано с грешка 19461687 и този предишен въпрос . Ако изхвърлите обобщената стойност от вашата заявка в 11gR2 или 12cR1, ще видите:

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

В SQL*Plus и SQL Developer действителната стойност се показва като:

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

и не можете да копирате стойността от SQL Developer. (В 12cR2 нулите вече не се появяват в дъмпа, стойността се показва без интервала и можете да я копирате, така че грешката изглежда е коригирана.)

Тези нулеви байтове изглежда карат Toad изобщо да не показва стойността, вероятно защото вижда първия нулев байт и го третира като терминатор на низ (или нещо по този начин все пак).

SQL Fiddle изглежда се справя с това, но db<>fiddle също изглежда има проблем с него и не връща нищо за цялата цигулка, когато тази заявка е налице.

Можете да предефинирате колоната на вашата таблица като varchar2 вместо nvarchar2 , но предполагам, че този тип данни е с причина, така че вероятно не е практично.

Така че можете вместо това да го направите като част от заявката:

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

Или вижте дали корекцията за грешка 19461687 решава проблема за вас.



  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 dbms_job.submit:Смесване на синхронно и асинхронно

  2. Промяна на формата на датата

  3. Oracle SQL - Как да извлечете най-високите 5 стойности на колона

  4. Как да изпълним процедура вътре в пакет в Oracle

  5. Използване на функцията MIN в клаузата за наличие