Skip to Main Content

Oracle Database Discussions

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Bug in RETURNING LISTAGG DISTINCT

Thorsten KettnerOct 20 2025

When using RETURNING LISTAGG(DISTINCT …) in a PL/SQL update or delete statement, the DISTINCT gets ignored.

I checked this in Oracle 19c, 21c and 26ai.

Here is an example:

CREATE TABLE mytable (col int);
INSERT INTO mytable VALUES (1);
INSERT INTO mytable VALUES (1);

DECLARE
  v_statement VARCHAR2(4000);
  v_values    VARCHAR2(4000);
BEGIN
  DELETE FROM mytable RETURNING LISTAGG(DISTINCT col, ',' ON OVERFLOW TRUNCATE) INTO v_values;
  DBMS_OUTPUT.PUT_LINE(v_values);
END;
/

Output is 1,1 but should be 1 of obviously.

Here is a link showing the faulty output for both UPDATE and DELETE: https://freesql.com/?compressed_code=H4sIAAAAAAAACsWQT2uDQBDF74Lf4d1iQG0sPTX04J%252BJXTBrWNf0GEwiyYLRkF0D%252FfZF2%252BRSKD0UehkY3pvh%252FV4sKJQEGUYZ4fRuqm1Tw9l1DVRrpnPbYrwgIcG4zO%252F6OsxKKuAEvzLYluch6g%252FPSFghGY8lVAtBshSc8RQZK2SYps5d9X1%252FCqWxrVV7gDq03aXe%252B%252BMbeVQaendRZwN97Ppmj643594gcLHtzdemEbgBVKtNXQ2XCcVZKMi2gOtGm8rUp7o1WIcifg3Fo%252FM0m82GqIN8rZq%252B1gC%252ByxGljA%252BucpUMrd1wC5IYKnsZ5w9ku65xMXEnyDnyNYlFlr9BipLHoaTpZ4e3BGOcJFoWm7yUq1L6q1JuMsbJuTmGSMSTuW09fLWsq1PtjvPvmRPKSBIWIl%252Fewf8D1fMojz8AeSRINbcCAAA%253D&code_language=PL_SQL&code_format=false

This post has been answered by Gerrit van der Linden on Oct 20 2025
Jump to Answer
Comments
Post Details
Added on Oct 20 2025
9 comments
171 views