Создайте последовательность с помощью START WITH из Query

Этот фрагмент кода работает хорошо, но он находится в java.

Чтобы перевести его, вы можете сделать это следующим образом:

 Function CollectionSort(ByRef oCollection As Collection) As Long
Dim smTempItem1 As SeriesManager, smTempItem2 As SeriesManager
Dim i As Integer, j As Integer
i = 1
j = 1

On Error GoTo ErrFailed
Dim swapped As Boolean
swapped = True
Do While (swapped)
    swapped = False
    j = j + 1

    For i = 1 To oCollection.Count - 1 - j
        Set smTempItem1 = oCollection.Item(i)
        Set smTempItem2 = oCollection.Item(i + 1)

        If smTempItem1.Diff > smTempItem2.Diff Then
            oCollection.Add smTempItem2, , i
            oCollection.Add smTempItem1, , i + 1

            oCollection.Remove i + 1
            oCollection.Remove i + 2

            swapped = True
        End If
    Next
Loop
Exit Function

ErrFailed:
     Debug.Print "Error with CollectionSort: " & Err.Description
     CollectionSort = Err.Number
     On Error GoTo 0
End Function

SeriesManager - это просто класс, который хранит разница между значениями. Это действительно может быть любое числовое значение, которое вы хотите сортировать. Это по умолчанию сортируется в порядке возрастания.

Мне сложно сортировать коллекцию в vba без создания пользовательского класса.

13
задан OMG Ponies 17 April 2011 в 01:51
поделиться

1 ответ

КЛАУЗА START WITH принимает целое число. Вы можете сформировать оператор "Создать последовательность" динамически, а затем выполнить его с помощью execute immediate, чтобы добиться этого.

declare
    l_new_seq INTEGER;
begin
   select max(id) + 1
   into   l_new_seq
   from   test_table;

    execute immediate 'Create sequence test_seq_2
                       start with ' || l_new_seq ||
                       ' increment by 1';
end;
/

Посмотрите эти ссылки.

http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_6014.htm
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm

39
ответ дан 1 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: