#java #sql-server #database
#java #sql-сервер #База данных
Вопрос:
Я определил следующий параметр с табличным значением в своей БД:
CREATE TYPE RVUSER.GXS_OTABTYP AS TABLE (
app_name VARCHAR(2000),
func VARCHAR(2000),
DESCRIPTION VARCHAR(4000),
OWNER VARCHAR(30),
VERSION VARCHAR(30),
ISACTIVE VARCHAR(1),
FILENAME VARCHAR(4000),
FUNC_DESC VARCHAR(4000),
READ_USERIDS VARCHAR(4000),
ADMIN_USERIDS VARCHAR(4000),
ISGLOBAL VARCHAR(1),
LAST_UPDATEDBY VARCHAR(30),
ISAPPACTIVE VARCHAR(1)
)
При попытке вызвать хранимую процедуру, из JAVA
которой в TVP
качестве параметра используется указанное выше, я постоянно получал сообщение об ошибке: не удалось найти RVUSER.GXS_OTABTYP
.
cs = (SQLServerCallableStatement) connection.prepareCall("exec RVUSER.saveGxAppRec ?");
cs.setStructured(1,"RVUSER.GXS_OTABTYP",sourceDataTable);
Копая глубже, я попытался выяснить все объекты внутри схемы RVUSER
, используя:
SELECT name AS function_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date,*
FROM sys.objects
WHERE SCHEMA_NAME(schema_id) LIKE '%RVUSER%';
Я не смог найти то TVP RVUSER.OTABTYP
, что я определил.
Итак, я проверил схему ‘sys’, и я смог увидеть TABLE_TYP
объект с именем: TT_GXS_OTABTYP_160F4887
.
Я не могу понять, почему TVP
создается в схеме sys, которая тоже с другим именем, а не в RVUSER
схеме, которую я определил.
Нужна помощь для решения этой проблемы. Спасибо.
Комментарии:
1. Вы уверены, что в вашем
CREATE
заявлении в качестве цели использовалась правильная база данных?2. ДА. Сначала я подумал, что это проблема, и снова запустил инструкцию create и получил это предупреждение: тип ‘RVUSER.GXS_OTABTYP’ уже существует, или у вас нет разрешения на его создание. Так что это не неправильная БД.
3. Что произойдет, если вы полностью укажете имя своего типа (добавьте server и db-name)?
4. Я запустил его на TOAD, используя правильный сервер и db-name.
5. Извините, не знаю. Надеюсь, что кто-то просветился…