是否可以在JasperReports中使用Table Valued Parameter?
我在SQL SERVER上创建了一个新类型,我正在尝试将它作为param传递给jasper sql过程:
CREATE TYPE codlist AS TABLE (
[cod] int NOT NULL PRIMARY KEY
);
GO
我在Jasper Studio中尝试过,但是当我将table参数设置为object时,我有一些错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Operand type clash: varbinary is incompatible with codlist.
当我将table参数设置为SQLServerDataTable时:Parameter type not supported in query
使用纯Java代码查看我的JDBC测试:
// Create an in-memory data table.
SQLServerDataTable sourceDataTable = new SQLServerDataTable();
// Define metadata for the data table.
sourceDataTable.addColumnMetadata("cod", java.sql.Types.INTEGER);
// Populate the data table.
sourceDataTable.addRow(344057);
sourceDataTable.addRow(344058);
sourceDataTable.addRow(344132);
sourceDataTable.addRow(344135);
sourceDataTable.addRow(344159);
// Pass the data table as a table-valued parameter using a prepared statement.
SQLServerPreparedStatement pStmt
= (SQLServerPreparedStatement) connection.prepareStatement(
"EXECUTE dbo.procedure_test_table_valued_parameter ?;");
pStmt.setStructured(1, "dbo.codlist", sourceDataTable);
try (ResultSet rs = pStmt.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getInt(1) + " - " + rs.getString(2));
}
}
我将调用一个存储过程,该存储过程将作为参数接收表值参数。 我尝试了但它不接受我传递这个对象,它不接受任何其他:数组,列表等。
这是我的jrxml
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Principal" pageWidth="595" pageHeight="842" whenNoDataType="BlankPage" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="0" bottomMargin="0" uuid="dc6d0467-36c2-4eb9-ab5e-78e7d903d9aa">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="SQLSRV"/>
<property name="com.jaspersoft.studio.unit." value="pixel"/>
<property name="com.jaspersoft.studio.data.sql.SQLQueryDesigner.sash.w1" value="265"/>
<property name="com.jaspersoft.studio.data.sql.SQLQueryDesigner.sash.w2" value="724"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<parameter name="PATH" class="java.lang.String">
<defaultValueExpression><![CDATA[""]]></defaultValueExpression>
</parameter>
<parameter name="COD" class="java.lang.Integer">
<defaultValueExpression><![CDATA[94807]]></defaultValueExpression>
</parameter>
<parameter name="CODLIST" class="com.microsoft.sqlserver.jdbc.SQLServerDataTable" isForPrompting="false">
<parameterDescription><![CDATA[]]></parameterDescription>
</parameter>
<queryString language="plsql">
<![CDATA[EXEC dbo.pr_with_table_as_parameter $P{CODLIST}]]>
</queryString>
答案 0 :(得分:0)
您使用plsql
default QueryExecuterFactory
使用扩展PlSqlQueryExecuterFactory的JRJdbcQueryExecuterFactory returns JRJdbcQueryExecuter将使用{ {3}}当使用未处理的类类型时,请调用java.sql.PreparedStatement,因为在您的情况下,它不是过程调用(查询与statement.setObject(parameterIndex, parameterValue)
不匹配)
不,它不可能。
是的,可能您需要实现自己的JRQueryExecuter
,并返回您自己的jasperreports.properties
,并使用您自己的名称在<queryString language="mynewsql">
注册,实施您的致电(司机),然后在psql
。
按照上面的步骤显示final = tf.add(add1,add2)
print(final)
Tensor("Add_35:0", shape=(1, 32, 32, 7, 1), dtype=float32)
QueryExecuterFactory的设置方式,你应该没问题。