Поделиться через


Выполнение пакетов

Перед выполнением пакета инструкций приложение должно сначала проверка, поддерживается ли оно. Для этого приложение вызывает 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 (?, ?, ?, ?);  

Дополнительные сведения о параметрах см . в разделе "Параметры инструкции" далее в этом разделе.