Lotes em execução
Antes de um aplicativo executar um lote de instruções, ele deve primeiro verificar se há suporte para elas. Para tanto, o aplicativo chama SQLGetInfo com as opções SQL_BATCH_SUPPORT, SQL_PARAM_ARRAY_ROW_COUNTS e SQL_PARAM_ARRAY_SELECTS. A primeira opção retorna se as instruções geradoras de contagem de linhas e geradoras de conjunto de resultados são compatíveis com lotes e procedimentos explícitos, enquanto as duas últimas opções retornam informações sobre a disponibilidade de contagens de linhas e conjuntos de resultados na execução parametrizada.
Lotes de instruções são executados por meio de SQLExecute ou SQLExecDirect. Por exemplo, a chamada a seguir executa um lote explícito de instruções para abrir uma nova ordem de venda.
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);
Quando um lote de instruções geradoras de resultados é executado, ele retorna uma ou mais contagens de linhas ou conjuntos de resultados. Para obter informações sobre como recuperá-los, confira Vários resultados.
Se um lote de instruções incluir marcadores de parâmetro, eles serão numerados na ordem crescente de parâmetros como em qualquer outra instrução. Por exemplo, o seguinte lote de instruções tem parâmetros numerados de 1 a 21; os da primeira instrução INSERT são numerados de 1 a 5 e os da última instrução INSERT são numerados de 18 a 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 (?, ?, ?, ?);
Para obter mais informações sobre parâmetros, confira Parâmetros de instrução mais adiante nesta seção.