Доступ к временной таблице из DBUnit

У меня есть хранимая процедура в Sybase, которая возвращает некоторые данные во временную таблицу (давайте назовем ее #results). Если я создаю эту таблицу из своего собственного кода и вызываю хранимую процедуру и проверяю #results, все в порядке (я использую Python для этой цели). Я могу сгенерировать ожидаемый набор результатов для моего теста.

Однако, когда я пытаюсь создать контрольный пример DBUnit, чтобы код

  1. создает временную таблицу через Spring JdbcTemplate

  2. вызывает эту процедуру и проверяет возвращенные данные

Я получаю NoSuchTableException из DbUnit при проверке набора результатов.

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 и заполнены данными.

Кто-нибудь сделал это успешно (например, использовал временную таблицу Sybase из DbUnit)? Если да, то как?

1 ответ

Если вы создаете временные таблицы, используя "#" в качестве первого символа имени таблицы:

Временные таблицы:

  • Существуют только для продолжительности пользовательского сеанса или для объема процедуры, которая их создает.

  • Не может быть общим для пользовательских подключений

  • Автоматически удаляются в конце сеанса или процедуры (или могут быть удалены вручную)

Вы можете создать обычные пользовательские таблицы в базе данных tempdb, указав имя базы данных в команде, которая создает таблицу:

Обычные пользовательские таблицы в базе данных tempdb:

  • Может сохраняться через сеансы

  • Может использоваться при массовых операциях копирования

  • Можно поделиться, предоставив разрешения на них

  • Должен быть явно удален владельцем (в противном случае они удаляются при перезапуске Adaptive Server)

Другие вопросы по тегам