我在Sybase中有一个存储过程,它在临时表中返回一些数据(我们称之为#results
)。如果我从我自己的代码创建这个表并调用存储过程并检查#results一切都很好(我为此目的使用Python)。我可以为我的测试生成预期的结果集。
但是当我尝试创建一个DBUnit测试用例以便代码
时通过Spring JdbcTemplate
调用此过程并检查返回的数据
检查结果集时,我从DbUnit获得NoSuchTableException
。
15:55:52.980 [main] DEBUG c.m.e.e.dbtest.helper.SQLTestHelper - *** expected table: #results
15:55:52.980 [main] DEBUG org.dbunit.dataset.FilteredDataSet - getTable(tableName=#results) - start
15:55:52.980 [main] DEBUG o.d.d.filter.SequenceTableFilter - accept(tableName=#results) - start
15:55:52.980 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=#results) - start
15:55:52.980 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=#results) - end - result=#RESULTS
15:55:52.980 [main] DEBUG org.dbunit.database.DatabaseDataSet - getTable(tableName=#results) - start
15:55:52.980 [main] DEBUG org.dbunit.database.DatabaseDataSet - initialize() - start
15:55:52.980 [main] DEBUG org.dbunit.database.DatabaseDataSet - Initializing the data set from the database...
15:55:52.980 [main] DEBUG o.d.d.DatabaseDataSourceConnection - getConnection() - start
15:55:52.980 [main] DEBUG m.b.t.TransactionResourceManager - Fetched TransactionResourceResolver [null]
15:55:52.980 [main] DEBUG msjava.pool.BasicObjectPool - Attempting to retrieve object from pool 'ConnectionPoolOf-dbunitDS'
15:55:52.980 [main] DEBUG msjava.pool.BasicObjectPool - Retrieved object 'TransactionInfoCachingConnection on DBCallSavingConnection on com.sybase.jdbc3.jdbc.SybConnection@170984c' from pool 'ConnectionPoolOf-dbunitDS'
15:55:53.402 [main] DEBUG org.dbunit.database.DatabaseDataSet -
database product name=Adaptive Server Enterprise
database major version=12
database minor version=5
jdbc driver name=jConnect (TM) for JDBC (TM)
jdbc driver version=jConnect (TM) for JDBC(TM)/6.05(Build 26564)/P/EBF16903/JDK14/Sun May 31 1:05:35 2009
jdbc driver major version=6
jdbc driver minor version=0
15:55:53.402 [main] DEBUG org.dbunit.database.DatabaseDataSet - metadata resultset=com.sybase.jdbc3.jdbc.SybResultSet@1b595f3
15:55:53.402 [main] DEBUG org.dbunit.database.DatabaseDataSet - getTableMetaData(tableName=#results) - start
15:55:53.402 [main] DEBUG org.dbunit.database.DatabaseDataSet - initialize() - start
15:55:53.402 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=#results) - start
15:55:53.402 [main] DEBUG o.dbunit.dataset.OrderedTableNameMap - getTableName(tableName=#results) - end - result=#RESULTS
15:55:53.402 [main] ERROR org.dbunit.database.DatabaseDataSet - Table '#results' not found in tableMap=org.dbunit.dataset.OrderedTableNameMap[_tableNames=[], _tableMap={}, _caseSensitiveTableNames=false]
与测试代码执行并行检查数据库(在断点处)我可以看到临时表确实在tempdb
中创建并填充了数据。
有没有人成功完成过这样的事情(例如,使用了DbUnit的Sybase临时表)?如果是,怎么样?
答案 0 :(得分:1)
如果使用“#”作为表名的第一个字符来创建临时表:
临时表:
仅在用户会话期间或创建它们的过程范围内存在
无法在用户连接之间共享
在会话或程序结束时 会自动删除 (或者可以手动删除)
您可以通过在创建表的命令中指定数据库名称来在tempdb中创建常规用户表:
tempdb中的常规用户表:
可以在会话中持续
可以通过批量复制操作
可以通过授予权限来共享
必须由所有者显式删除(否则,在重新启动Adaptive Server时将删除它们)