我在Oracle数据库上执行了以下查询:
SELECT
'ENELSERV' as CODCLIENTE,
'SL' as SOTTOSISTEMA,
'DD01' as ACCOUNT,
concat('0',to_char(sysdate,'DDD')) as Progressivo,
substr(xmltype (d.documento).EXTRACT (
'//cbc:IssueDate/text()')
.getStringVal (),1,4) as ANNO,
xmltype (d.documento).EXTRACT (
'//cac:AccountingCustomerParty/cac:Party/cac:PartyName/cbc:Name/text()')
.getStringVal () as DESTINATARIO,
concat(concat(
xmltype (d.documento).EXTRACT (
'//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:StreetName/text()'
).getStringVal ()
,' '),xmltype (d.documento).EXTRACT (
'//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:BuildingNumber/text()'
).getStringVal ())
AS INDIRIZZO,
xmltype (d.documento).EXTRACT (
'//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:PostalZone/text()'
).getStringVal () as CAP,
xmltype (d.documento).EXTRACT (
'//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:CountrySubentityCode/text()'
).getStringVal () AS PROVINCIA,
xmltype (d.documento).EXTRACT (
'//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:CityName/text()'
).getStringVal () AS COMUNE,
xmltype (d.documento).EXTRACT (
'//in:Invoice/cbc:ID/text()')
.getStringVal () AS ACCTUM,
pdf
from coda_tx c, documenti_tx d
WHERE C.FK_TIPO_DOC = 99
AND C.FK_STATO = 1
AND C.FK_PIVA_MITTENTE = '05779711000'
AND C.PK_CODA = D.PFK_CODA
AND C.CANALE='STA'
正如您所见,此查询选择来自数据库表的字段和来自表示表的特定字段的XML文件中的某些字段。
当我在 Oracle SQL Developer 中执行它时,它运行正常,我正确地将值检索到XML中。
然后我将DAO类(使用JDBC)实现到执行上一个查询的Java代码中,这个:
public void getListaFatturePDF(String partitaIva) {
System.out.println("INTO ottieniListaFatturePDF()");
Blob blobFibalPdf;
String sql;
StringBuffer sb = new StringBuffer();
sb.append("SELECT 'ENELSERV' as CODCLIENTE, 'SL' as SOTTOSISTEMA, 'DD01' as ACCOUNT, ");
sb.append("concat('0',to_char(sysdate,'DDD')) as Progressivo, ");
sb.append("substr(xmltype (d.documento).EXTRACT ('//cbc:IssueDate/text()').getStringVal (),1,4) as ANNO, ");
sb.append("xmltype (d.documento).EXTRACT ('//cac:AccountingCustomerParty/cac:Party/cac:PartyName/cbc:Name/text()').getStringVal () as DESTINATARIO, ");
sb.append("concat(concat(xmltype (d.documento).EXTRACT ('//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:StreetName/text()').getStringVal () ");
sb.append(",' '),xmltype (d.documento).EXTRACT ('//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:BuildingNumber/text()').getStringVal ()) AS INDIRIZZO, ");
sb.append("xmltype (d.documento).EXTRACT ('//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:PostalZone/text()').getStringVal () as CAP, ");
sb.append("xmltype (d.documento).EXTRACT ('//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:CountrySubentityCode/text()').getStringVal () AS PROVINCIA, ");
sb.append("xmltype (d.documento).EXTRACT ('//cac:AccountingCustomerParty/cac:Party/cac:PhysicalLocation/cac:Address/cbc:CityName/text()').getStringVal () AS COMUNE, ");
sb.append("xmltype (d.documento).EXTRACT ('//in:Invoice/cbc:ID/text()').getStringVal () AS ACCTUM, ");
sb.append("pdf ");
sb.append("from coda_tx c, documenti_tx d ");
sb.append("WHERE C.FK_TIPO_DOC = 99 ");
sb.append("AND C.FK_STATO = 1 ");
sb.append("AND C.PK_CODA = D.PFK_CODA ");
sb.append("AND C.CANALE='STA' ");
sb.append("AND C.FK_PIVA_MITTENTE = '");
sb.append(partitaIva);
sb.append("'");
sql = sb.toString();
try {
statment = connection.createStatement();
ResultSet rs = statment.executeQuery(sql);
System.out.println("ResultSet obtained");
//STEP 5: Extract data from result set
while(rs.next()){
// Retrieve by column name:
String codCliente = rs.getString("CODCLIENTE");
String sottosistema = rs.getString("SOTTOSISTEMA");
String account = rs.getString("ACCOUNT");
String progressivo = rs.getString("Progressivo");
String anno = rs.getString("ANNO");
String destinatario = rs.getString("DESTINATARIO");
String indirizzo = rs.getString("INDIRIZZO");
String cap = rs.getString("CAP");
String provincia = rs.getString("PROVINCIA");
String comune = rs.getString("COMUNE");
String acctum = rs.getString("ACCTUM");
Blob pdf = rs.getBlob("PDF");
//int pfk_coda = rs.getInt("PFK_CODA");
//Blob blobCurrentPdf = rs.getBlob("PDF");
// Display values:
System.out.println("codCliente: " + codCliente);
System.out.println("sottosistema: " + sottosistema);
System.out.println("account: " + account);
System.out.println("progressivo: " + progressivo);
System.out.println("anno: " + anno);
System.out.println("destinatario: " + destinatario);
System.out.println("indirizzo: " + indirizzo);
System.out.println("cap: " + cap);
System.out.println("provincia: " + provincia);
System.out.println("comune: " + comune);
System.out.println("acctum: " + acctum);
System.out.println("----------------------------------------------------------------------------------");
//System.out.println("PFK_CODA: " + pfk_coda);
}
} catch (SQLException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
问题是我对标准数据库单元格的值没有问题(字段: CODCLIENTE , SOTTOSISTEMA 和 ACCOUNT )但是对于从XML检索到的所有其他字段,我有一个空字符串作为值。
为什么呢?我错过了什么?我该如何解决这个问题?
TNX