db2 如何在RPGLE中将“XMLTABLE”嵌入式SQL语句中的长字符串分成多行?

hzbexzde  于 2022-11-23  发布在  DB2
关注(0)|答案(2)|浏览(154)

我有一个超过100个字符的XML路径(因此在保存源代码时会被截断)。我的语句如下所示:

Exec SQL
Select Whatever
  Into :Stuff
From Table as X,
  XmlTable(
    XmlNamespaces('http://namespace.url/' as "namespacevalue"),
    '$X/really/long/path' Passing X.C1 as "X"
    Columns
      Field1 Char(3) Path 'example1',
      Field2 Char(8) Path 'example2',
      Field3 Char(32) Path '../example3'
  ) As R;

我必须将**$X/really/long/path**跨多行断开。根据IBM's documentation
加号(+)可用来表示字串常数的接续。
然而,这甚至没有通过预编译(“Token + was not valid”)。我怀疑这是由于字符串在语句中的位置。
我也试过:

  • 将路径放在主机变量中;这是不允许的
  • 使用SQL CONCAT或||;不允许
  • 将路径放入SQL全局变量而不是主机变量中;不允许

我考虑过:

  • 准备整个语句,但这并不理想,原因有很多
  • 在层次结构中的较高级别截断路径,但这不会返回所需的记录“粒度

有没有什么方法可以将XmlTable函数中的这个特定文字跨越源代码中的多行?感谢您的所有想法!

des4xlb0

des4xlb01#

比如

Exec SQL
Select Whatever
  Into :Stuff
From Table as X,
  XmlTable(
    XmlNamespaces('http://namespace.url/' as "namespacevalue"),
    '$X/really/+
     long/path' Passing X.C1 as "X"
    Columns
      Field1 Char(3) Path 'example1',
      Field2 Char(8) Path 'example2',
      Field3 Char(32) Path '../example3'
  ) As R;

应该有用,你试过了吗?

hmae6n7t

hmae6n7t2#

+对我不起作用,所以我不得不用//代替/来缩短路径,这可能是次优的。

相关问题