Выполнение пакетов
Перед выполнением пакета инструкций приложение должно сначала проверка, поддерживается ли оно. Для этого приложение вызывает SQLGetInfo с параметрами SQL_BATCH_SUPPORT, SQL_PARAM_ARRAY_ROW_COUNTS и SQL_PARAM_ARRAY_SELECTS. Первый вариант возвращает, поддерживаются ли инструкции счетчика строк и результирующих наборов в явных пакетах и процедурах, а последние два варианта возвращают сведения о доступности счетчиков строк и результирующих наборах в параметризованном выполнении.
Пакеты инструкций выполняются через SQLExecute или SQLExecDirect. Например, следующий вызов выполняет явный пакет инструкций для открытия нового заказа на продажу.
SQLCHAR *BatchStmt =
"INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)"
"VALUES (2002, 1001, {fn CURDATE()}, 'Garcia', 'OPEN');"
"INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (2002, 1, 1234, 10);"
"INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (2002, 2, 987, 8);"
"INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (2002, 3, 566, 17);"
"INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (2002, 4, 412, 500)";
SQLExecDirect(hstmt, BatchStmt, SQL_NTS);
При выполнении пакета инструкций создания результатов возвращается одно или несколько счетчиков строк или результирующих наборов. Сведения о том, как получить их, см. в разделе "Несколько результатов".
Если пакет инструкций включает маркеры параметров, они нумеруются в увеличении порядка параметров, так как они находятся в любой другой инструкции. Например, следующий пакет инструкций имеет параметры, нумерованные от 1 до 21; те, которые в первой инструкции INSERT нумеруются от 1 до 5, и те, которые в последней инструкции INSERT нумеруются 18–21.
INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)
VALUES (?, ?, ?, ?, ?);
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);
INSERT INTO Lines (OrderID, Line, PartID, Quantity) VALUES (?, ?, ?, ?);
Дополнительные сведения о параметрах см . в разделе "Параметры инструкции" далее в этом разделе.