簡體   English   中英

dbms_xmlgen.getxml在Oracle中顯示空輸出

[英]dbms_xmlgen.getxml showing null output in Oracle

當我在SQL查詢中單獨運行dbms_xmlgen.getxml函數時,它給了我xml輸出但是當我在程序中運行它時,它給了我null輸出。
你能告訴我錯誤在哪里嗎?

下面是我不使用PL / SQL單獨運行的代碼

select dbmX_xmlgen.getxml('select 
wmgs.SRC_NUM,
SRC_ID,
HS.X_START_DATE,
pd_INT_ID,
pd.X_R_RATE_KEY,
COND.DESC_TEXT,
pd.NAME,
Relatedpd.NAME ,
Relatedpd.PART_NUM,
pd.EFF_START_DATE,
pd.TYPE,
PAY.NAME ,
PAY.TYPE
from 
alpha.X_SRC wmgs,
alpha.X_pd_INT_SRC HS,
alpha.X_pd_INT pd,
alpha.X_CONDITION COND,
alpha.X_pd_INT Relatedpd,
alpha.X_pd_INT_XM Pay
where
wmgs.ROW_ID = HS.SRC_ID (+)
AND HS.pd_INT_ID = pd.ROW_ID (+)
AND HS.AMT_CURCY_CD = COND.ROW_ID (+)
AND pd.X_REL_pd_ID = Relatedpd.CFG_MODEL_ID (+)
AND pd.ROW_ID=PAY.PAR_ROW_ID (+)
AND wmgs.SRC_NUM=''CAQZ''
AND (HS.X_START_DATE >= to_date(''01/01/2000'',''dd/mm/yyyy'') OR pd.EFF_START_DATE >= to_date(''01/01/2010'',''dd/mm/yyyy'')) 
AND (HS.AMT_DATE <= to_date(''01/01/2099'',''dd/mm/yyyy'') OR pd.EFF_END_DATE<= to_date(''01/01/2099'',''dd/mm/yyyy''))
')xml from dual;

下面是我通過程序運行的代碼

create or replace procedure alpha.test1(p_start_date IN DATE, p_end_date IN DATE, p_src_num IN VARCHAR2, p_xml_out OUT CLOB) 

IS
v_xml CLOB;
ctx dbms_xmlgen.ctxhandle;


BEGIN

ctx := dbms_xmlgen.newcontext
('select 
wmgs.SRC_NUM,
SRC_ID,
HS.X_START_DATE,
pd_INT_ID,
pd.X_R_RATE_KEY,
COND.DESC_TEXT,
pd.NAME,
Relatedpd.NAME ,
Relatedpd.PART_NUM,
pd.EFF_START_DATE,
pd.TYPE,
PAY.NAME ,
PAY.TYPE
from 
alpha.X_SRC wmgs,
alpha.X_pd_INT_SRC HS,
alpha.X_pd_INT pd,
alpha.X_CONDITION COND,
alpha.X_pd_INT Relatedpd,
alpha.X_pd_INT_XM Pay
where
wmgs.ROW_ID = HS.SRC_ID (+)
AND HS.pd_INT_ID = pd.ROW_ID (+)
AND HS.AMT_CURCY_CD = COND.ROW_ID (+)
AND pd.X_REL_pd_ID = Relatedpd.CFG_MODEL_ID (+)
AND pd.ROW_ID=PAY.PAR_ROW_ID (+)
AND wmgs.SRC_NUM='''|| p_src_num ||'''
AND (HS.X_START_DATE >= to_date('''||p_start_date||''',''dd/mm/yyyy'') OR PROD.EFF_START_DT >= to_date('''||p_start_date||''',''dd/mm/yyyy'')) 
AND (HS.AMT_DATE <= to_date('''||p_end_date||''',''dd/mm/yyyy'') OR PROD.EFF_END_DT<= to_date('''||p_end_date||''',''dd/mm/yyyy''))
');

dbms_xmlgen.SETNULLHANDLING (ctx, 2);

v_xml := dbms_xmlgen.getxml(ctx);

p_xml_out := v_xml;

END;
/

我不確定這是否是您正在尋找的,但您可以使用pl sql的內部xml函數

那么它看起來像這樣:

    DECLARE
    vxml   CLOB;
BEGIN
SELECT XMLELEMENT ( "ROOT",
                          xmlagg ( xmlelement( "data",
                                                XMLELEMENT(
                                                    "SRC_NUM", wmgs.src_num
                                                ) , XMLELEMENT(
                                                    "SRC_ID", SRC_ID
                                                ), XMLELEMENT(
                                                    "X_START_DATE", HS.X_START_DATE
                                                ), XMLELEMENT(
                                                    "pd_INT_ID", pd.pd_INT_ID
                                                ), XMLELEMENT(
                                                    "X_R_RATE_KEY", pd.X_R_RATE_KEY
                                                )
 )))
into vxml
from alpha.x_src wmgs,
alpha.x_pd_int_src hs,
alpha.x_pd_int pd,
alpha.x_condition cond,
alpha.x_pd_int relatedpd,
alpha.x_pd_int_xm pay; 

END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM