首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Db2将IBM i QSYS2.IFS_WRITE的SQL输出以XML格式写入IFS

使用Db2将IBM i QSYS2.IFS_WRITE的SQL输出以XML格式写入IFS
EN

Stack Overflow用户
提问于 2022-08-04 15:46:53
回答 2查看 200关注 0票数 1

我正在尝试将XML输出从Db2文件写入IFS。

从运行此SQL语句将在导航窗口上给出适当的输出:

代码语言:javascript
复制
select xmlelement (name "root",  
    xmlelement (name "EmployeeList",
      XMLAGG (
        XMLELEMENT (NAME "Employee",
          XMLFOREST (
            trim(id) as "ID",
            trim(firstname) as "FirstName",
            trim(lastname) as "LastName"
        )
      )
    )
  )
)
FROM myfile;

为清晰起见,添加了以下行提要和间距:

代码语言:javascript
复制
<root>
 <EmployeeList>
  <Employee>
   <ID>1</ID>
   <FirstName>ROBERT</FirstName>
   <LastName>JONES</LastName>
  </Employee>
  <Employee>
   <ID>2</ID>
   <FirstName>SMITH</FirstName>
   <LastName>FRED</LastName>
  </Employee>
 </EmployeeList>
</root>

如果我使用这样的常量,那么编写IFS没有问题:

代码语言:javascript
复制
CALL QSYS2.IFS_WRITE(
  PATH_NAME =>'/myFileInXML.xml',
  OVERWRITE => 'REPLACE',
  FILE_CCSID => 1208,
  LINE => ('<root><EmployeeList><Employee><ID>99</ID><FirstName>Joe</FirstName><LastName>Arbuckle</LastName></Employee></EmployeeList></root>'
 )
);

但是,如果我像这样将select和IFS写入组合在一起,就会得到一个错误--我的参数无效:

代码语言:javascript
复制
CALL QSYS2.IFS_WRITE(
  PATH_NAME =>'/myFileInXML2.xml',
  OVERWRITE => 'REPLACE',
  FILE_CCSID => 1208,
  LINE => (

select xmlelement (name "root",  
    xmlelement (name "EmployeeList",
      XMLAGG (
        XMLELEMENT (NAME "Employee",
          XMLFOREST (
            trim(id) as "ID",
            trim(firstname) as "FirstName",
            trim(lastname) as "LastName"
        )
      )
    )
  )
)
FROM myfile

 )
);

State: 07006供应商代码:-301消息: SQL0301输入变量*N或参数4无效。原因。。。。。语句中相对位置4中的值是与请求的操作不兼容的类型。该值为变量*N,描述符区域中的条目4,调用语句中的参数*N。名称*N表示使用了用户的描述符区域,或者在CALL语句上指定了常量或特殊寄存器。恢复正常。。。执行以下操作之一并再次尝试请求:--使用正确类型的变量。--在调用中指定正确类型的参数。-更改“声明过程”语句中为参数4指定的类型。

对于如何从Db2输出中以XML格式在IFS上创建流文件,我们将不胜感激。

编辑-也尝试过这种技术:

代码语言:javascript
复制
create table myfilexml (info xml);

insert into myfilexml
select xmlelement (name "root",  
    xmlelement (name "EmployeeList",
      XMLAGG (
        XMLELEMENT (NAME "Employee",
          XMLFOREST (
            trim(id) as "ID",
            trim(firstname) as "FirstName",
            trim(lastname) as "LastName"
        )
      )
    )
  )
)
FROM myfile;

这里有问题,只有当文件中只有一条记录时,它才能工作。这里的错误是:

SQLState2200L供应商代码:-20345消息: SQ20345 XML值,而不是格式良好的文档。原因。。。。。XML值不是格式良好的文档。存储在表中的XML值必须是具有单个根元素的格式良好的XML文档。恢复正常。。。*将XML值更改为具有单个根元素的格式良好的文档。再试一次请求。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-04 16:21:47

使用xmlserialize函数将XMLELEMENT转换为CLOB

下面是一个查询,它以XML格式将源成员的内容写入流文件:

代码语言:javascript
复制
call  qsys2.ifs_write( path_name=>'/home/steve/xml.txt',    
   overwrite=>'REPLACE', file_ccsid=>1208, line=>  (           
select xmlserialize(xmlelement (name "root",                   
    xmlelement (name "srcmbr",                                 
      XMLAGG (                                                 
        XMLELEMENT (NAME "srcline",                            
          XMLFOREST (                                          
            trim(srcseq) as "srcseq",                          
            trim(srcdat) as "srcdat",                          
            trim(srcdta) as "srcdta"                           
        ))))                                                   
)  as clob(50k)) srccode                                       
FROM qrpglesrc    ))                                           
票数 2
EN

Stack Overflow用户

发布于 2022-08-04 16:05:46

您需要将xml文档写入变量,然后将其写入文件中。

看起来就像

创建tABLE myfile(ID int、FirstName varchar(20)、LastName varchar(20)) EXEC选择xmlelement (名称"root“、XMLELEMENT (名称"EmployeeList”)、XMLAGG (名称"Employee“)、XMLFOREST ( trim(id)为"ID”、trim(名字)为"FirstName“),将(姓)从我的文件中修剪成:xml_doc;调用QSYS2.IFS_WRITE( PATH_NAME =‘/myFileInXML.xml’,覆盖=>‘替换’,FILE_CCSID => 1208,=> (:xmo__doc )行);

db<>fiddle https://dbfiddle.uk/?rdbms=db2_11.1&fiddle=03e6b63dd24d0c17c898adab0b8e1a37

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73238782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档