#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