xml - dbms_xmlgen.getxml 在 Oracle 中显示空输出
问题描述
当我dbms_xmlgen.getxml
在 SQL 查询中单独运行该函数时,它给了我 xml 输出,但是当我在过程中运行它时,它给了我空输出。
你能告诉我错误在哪里吗?
下面是我不使用 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;
推荐阅读
- spring-integration - 如何在spring集成数据库轮询器中从多个表中获取数据
- ios - SWIFT:navigationviewcontroller 不会将应用程序转换到另一个视图控制器
- regex - 一次匹配 2 个模式的正则表达式或匹配两者的 Applescript 中的 SED
- reactjs - InAppBrowser 未在 Ionic React App 中打开
- ansible - Ansible Jinja2 模板循环迭代
- html - 阻止 VSCode 在“#”符号后“绿化”我的 Dust / HTML 代码
- android - 使用导航组件在堆栈中添加片段链
- javascript - '(props: any, context?: any): 组件
' 已弃用 - spring-boot - 无法在 Windows 上使用 bat 文件运行 Spring Boot 应用程序
- flutter - 如何将客户登录详细信息添加到 Firebase?