Wendelius
Насколько я знаю, точного соответствия VARRAY в SQL Server не существует, по крайней мере, со всеми функциями сбора данных.
Таким образом, решение о том, что использовать, сильно зависит от того, какие операции вы собираетесь выполнять с массивом. В большинстве сценариев я считаю, что использование табличной переменной было бы достаточным. Взгляните на следующий пример
-- Define the type, valid only inside the batch
DECLARE @SomeList TABLE ( col1 int );
-- Add some data
INSERT INTO @SomeList (col1) values
(1), (2), (3), (4)
--Set based operation
BEGIN
SELECT * FROM @SomeList
END;
-- The result is
-- col1
-- 1
-- 2
-- 3
-- 4
--Cursor based operation to handle individual rows
BEGIN
DECLARE @col1value int;
DECLARE ListCursor CURSOR FOR SELECT col1 FROM @SomeList;
OPEN ListCursor;
FETCH NEXT FROM ListCursor INTO @col1value;
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT 'Col1 value is '+ CAST(@col1value AS varchar(100))
FETCH NEXT FROM ListCursor INTO @col1value;
END;
END ;
-- the result is
-- Col1 value is 1
-- Col1 value is 2
-- Col1 value is 3
-- Col1 value is 4
GO
Этот тип также может быть постоянным, как и в Oracle. В таком случае вам нужно создать тип отдельно. Посмотрите пример на сайте
Как передать несколько записей в хранимую процедуру[
^]
Также помните, что SQL Server не имеет понятия пакетов, поэтому вы не можете определить открытые типы и код в одном модуле.
daviseban
Спасибо майку Венделиусу за ваше решение.
VARRAY используется для передачи массива значений параметров из java в хранимый proc.
Пожалуйста, взгляните на этот java-код здесь:
Массив string [] = "список".toArray(новая строка[list.size()]);
ArrayDescriptor arraydesc = ArrayDescriptor.createDescriptor
("MY_DBSCHEMA.Q_ARRAY", соединение);
oracle.sql.ARRAY argArray = новый oracle.sql.ARRAY(arraydesc,соединение, массив);
Я использую ojdbc6.jar -здесь.
Но это очень специфично для оракула.
Можем ли мы добиться того же с помощью табличных типов в sql?
В принципе, мне нужно передать массив строк..
заранее спасибо
Wendelius
Я должен признать, что мои навыки Java находятся в ржавчине, поэтому я не совсем уверен в текущей ситуации. Однако, похоже, что табличные параметры поддерживаются начиная с JDBC 6.0 (MS). Видеть Использование Табличных Параметров[^]