我使用Excel 2010/VBA/XML和DOMDocument60解析器在Oracle中生成数据报告。我对nulls有问题。Oracle在xsql查询中支持null indicator=“yes”,以确保返回的记录集中包含null字段。如果字段有一个值,则XML如下所示:<代码>
我的代码调用Web服务进行查询:
Dim XML_HTTP As New MSXML2.XMLHTTP60: Call XML_HTTP.Open("POST", QUERY_URL, False): Call XML_HTTP.send
并检索XML结果:
Dim XML_OUTPUT As DOMDocument60: Set XML_OUTPUT = XML_HTTP.responseXML
它保存文件:
XML_OUTPUT.Save (FILE_PATH)
然后从保存的文件中加载电子表格:
Call DestinationWorksheet.Parent.XmlImport(FILE_PATH, Nothing, True, DestinationWorksheet.Range("A1"))
它用XML数据填充Excel电子表格。
如果像<代码>
我尝试使用xsql设置null indicator=“no”,这消除了null列,但它有一个不同的,不可接受的问题:动态构建的列顺序,这样,如果第一条XML记录表示具有null的Oracle记录,则null字段将从XML中排除,并且仅在遇到包含这些字段的记录时才添加到Excel列列表中,在这种情况下,这些字段将添加到列列表的末尾。
我也尝试过更换
有人知道如何让Oracle使用语法吗
考虑使用XSLT(根据最终使用需要重新构造XML文件的声明性编程语言)来删除NULL属性。VBA可以将XSLT处理器用于Microsoft XML对象。所需的XSLT非常简单明了,其中包括身份转换以原样复制所有内容(节点和属性),然后在NULL上运行空模板匹配以删除文档中出现的任何属性。
XSLT(嵌入以下VBA字符串)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />
<!-- Identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@NULL">
</xsl:template>
</xsl:stylesheet>
VBA(作为子程序或函数合并到您的项目中,甚至将Oracle XML文件路径作为参数传递)
Sub TransformXML()
Dim xmlDoc As Object, xslDoc As Object, newDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
Set xslDoc = CreateObject("MSXML2.DOMDocument")
Set newDoc = CreateObject("MSXML2.DOMDocument")
xmlDoc.Load "Original.xml"
xmlDoc.async = False
' EMBEDDED XSLT '
xslDoc.LoadXML "<?xml version=" & Chr(34) & "1.0" & Chr(34) & "?>" _
& "<xsl:stylesheet version=" & Chr(34) & "1.0" & Chr(34) _
& " xmlns:xsl=" & Chr(34) & "http://www.w3.org/1999/XSL/Transform" & Chr(34) & ">" _
& "<xsl:strip-space elements=" & Chr(34) & "*" & Chr(34) & " />" _
& "<xsl:output method=" & Chr(34) & "xml" & Chr(34) & " indent=" & Chr(34) & "yes" & Chr(34) & "" _
& " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "/>" _
& " <xsl:template match=" & Chr(34) & "node() | @*" & Chr(34) & ">" _
& " <xsl:copy>" _
& " <xsl:apply-templates select=" & Chr(34) & "node() | @*" & Chr(34) & " />" _
& " </xsl:copy>" _
& " </xsl:template>" _
& "<xsl:template match=" & Chr(34) & "@NULL" & Chr(34) & ">" _
& "</xsl:template>" _
& "</xsl:stylesheet>"
xslDoc.async = False
xmlDoc.transformNodeToObject xslDoc, newDoc
newDoc.Save "OutputXML.xml" ' READY FOR FINAL IMPORT '
MsgBox "Successfully transformed XML!", vbInformation
Set xmlDoc = Nothing
Set xslDoc = Nothing
Set newDoc = Nothing
End Sub
问题内容: 我有一个表,其中有一个带有默认值的列: 有一个存储过程插入到: 您可以看到,我必须有条件地分支以便我的插入使用默认值(如果为null)。仅一列就可以了,但是请考虑是否有更多列-语法可能很笨拙。 我是否可以使用一种语法来指定插入值应该返回默认值(如果为null)?我尝试了以下操作,但可以理解的是语法错误: 问题答案:
我正在尝试测试我的应用程序,我已经尝试解决它三天了,我寻找stackoverflow,但仍然无法解决它。我的问题是,Autowired始终为空,即使我将所有建议导入为空 或者 始终为null并给出此错误
问题内容: 我有一个动态编写的查询(通过Joomla的OO PHP)将一些值插入MySQL数据库。用户填写的表单上有一个用于美元金额的字段,如果他们将该字段留空,我希望输入系统的值为NULL。我已经在查询运行时将查询写到了错误日志中。这是查询的样子: 但是,当我查看数据库表时,尽管ActivatedDT正确设置为NULL,但BalanceInit和BalanceCurrent均为0.00。Acti
我试图使用Sqoop import-free-form查询将Oracle DB数据导入HDFS,方法是使用Oozie调度器使用“-as avrodatafile”连接两个表。以下是我的工作流程的内容。xml: Oozie作业成功运行,并在HDFS上的目录 /apps/hive/warehouse/loc_avro_import下创建Avro文件以及_SUCCESS标志。然后我使用以下Hive脚本在
我正在创建一个spring cloud Kafka流应用程序。我有一个输入主题和一个输出主题,我试图使用KStream.map函数对输入主题应用KStream键值转换操作 问题如果转换后的值为null,该函数将抛出IllegalArgumentException 我的问题是: 1:异常的原因?尽管文档中说:“忽略具有空键或空值的输入记录” 2:处理无状态/有状态操作中异常的最佳实践?一个try/c
问题内容: 之间有什么区别 和 为何后者不起作用? 问题答案: 在SQL中,之间的比较值,任何其他值(包括另一种使用比较操作符(如),,,等)将导致,这被认为是一个where子句的目的(严格来说,它的“不true”,而不是“false”,但效果相同)。 原因是a的意思是“未知”,因此与a进行任何比较的结果也都是“未知”。因此,通过编码您不会对行造成任何影响。 SQL提供了一种特殊的语法来测试列是否