Использование массива хоста в открытом курсоре во встроенном SQL

#sql-server-2012 #cobol #embedded-sql

#sql-server-2012 #cobol #встроенный-sql

Вопрос:

У меня есть этот встроенный код SQL:

 EXEC SQL
  OPEN MY_CURSOR USING :a1
END-EXEC
 

Где a1 — это массив из 20 элементов, но я не знаю заранее, сколько переменных хоста мне понадобится. Это может быть от 1 до 20. Если я использую его таким образом, и на самом деле я использую только 5 элементов из массива, я получил эту ошибку:

SQLCODE: -10000, SQLSTATE: 24000, SQLERRMC: недопустимое состояние курсора

Есть ли какая-либо возможность, как в разделе OPEN CURSOR отправить количество используемых элементов в массиве? Или я должен использовать массив с точным количеством элементов?

Комментарии:

1. Я полагаю, напрашивается вопрос, почему вы все равно используете курсор

2. Есть ли лучшее решение, как получить данные из SQL в Cobol?

3. В этом случае вы, возможно, захотите использовать обычный SELECT , например, взглянуть на SQL-запросы (поиск SELECT ).

4. Но я получаю несколько строк из этого выбора, могу ли я сделать это без использования курсора?

Ответ №1:

Переменные хоста в инструкции «ОТКРЫТЬ КУРСОР» ссылаются на параметры в предложении where.

При ОТКРЫТИИ данные не возвращаются.

Вместо этого вы получаете каждую отдельную строку, выдавая «ВЫБОРКУ В: var1, : var2 …», почти такую же, как при выборе одной строки.

Смотрите Документы здесь: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/fetch-transact-sql?view=sql-server-ver15