2015-04-23 43 views
0

帮助请在创建函数时发现错误,它将从列表返回一行。LISTAGG IN PL/SQL

SELECT listagg(' ' || V_RECEIVING_LIST.DOCUMENT_NUMBER || CHR(13)) 
     WITHIN GROUP (ORDER BY V_RECEIVING_LIST.DOCUMENT_NUMBER) 
FROM  svc.claim_detail, tbc.v_receiving_list 
WHERE claim_detail.id_claim = 334455 
     AND V_RECEIVING_LIST.ID_RECEIVING_LIST = CLAIM_DETAIL.ID_RECEIVING_LIST 

该代码返回正确的结果。

但接下来不返回相同。

DECLARE 
    scodes VARCHAR2 (4000); 
BEGIN 
    SELECT (LISTAGG(' ' || RECEIVING_LIST.DOCUMENT_NUMBER || CHR(13)) 
      WITHIN GROUP (ORDER BY RECEIVING_LIST.DOCUMENT_NUMBER)) 
    INTO scodes 
    FROM svc.claim_detail, tbc.v_receiving_list 
    WHERE claim_detail.id_claim = 334455 
     AND RECEIVING_LIST.ID_RECEIVING_LIST = CLAIM_DETAIL.ID_RECEIVING_LIST; 
    DBMS_OUTPUT.PUT_LINE(scodes); 
END; 
+0

什么的PL/SQL块显示器? SQL查询返回什么? –

+0

下面的示例“答案”仅显示一行输出(我可以看到)。所以有什么问题? 什么是独立的SQL返回与您的答案不同? – StewS2

回答

0
SQL> select * from V_RECEIVING_LIST ; 

DOCUMENT_NUMBER ID_RECEIVING_LIST 
--------------- -------------------- 
       1 a 
       1 a 
       2 b 

SQL> select * from claim_detail ; 

    ID_CLAIM ID_RECEIVING_LIST 
---------- -------------------- 
     123 a 
     123 a 
     124 b 


SQL> DECLARE 
    2  scodes VARCHAR2 (4000); 
    3 BEGIN 
    4  SELECT (LISTAGG(' '|| v_receiving_list.DOCUMENT_NUMBER || CHR(13)) 
    5    WITHIN GROUP (ORDER BY v_receiving_list.DOCUMENT_NUMBER)) 
    6 
    7  INTO scodes 
    8  FROM claim_detail, v_receiving_list 
    9  WHERE claim_detail.id_claim = 123 
10  AND v_receiving_list.ID_RECEIVING_LIST = CLAIM_DETAIL.ID_RECEIVING_LIST; 
11 
12 
13  DBMS_OUTPUT.PUT_LINE('The output is '||scodes); 
14 END; 
15/
1e output is 1 

PL/SQL procedure successfully completed.