Partilhar via


Execução de lotes

Antes de uma aplicação executar um conjunto de instruções, deve primeiro verificar se são suportadas. Para isso, a aplicação chama SQLGetInfo com as opções SQL_BATCH_SUPPORT, SQL_PARAM_ARRAY_ROW_COUNTS e SQL_PARAM_ARRAY_SELECTS. A primeira opção devolve se as instruções geradoras de contagem de linhas e de conjuntos de resultados são suportadas em lotes e procedimentos explícitos, enquanto as duas últimas opções retornam informação sobre a disponibilidade de contagens de linhas e conjuntos de resultados em execução parametrizada.

Lotes de instruções são executados através do SQLExecute ou SQLExecDirect. Por exemplo, a chamada seguinte executa um lote explícito de instruções para abrir uma nova encomenda 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, devolve uma ou mais contagens de linhas ou conjuntos de resultados. Para informações sobre como recuperar estes resultados, consulte Múltiplos Resultados.

Se um lote de instruções incluir marcadores de parâmetro, estes são numerados por ordem crescente dos parâmetros como em qualquer outra afirmação. Por exemplo, o seguinte lote de instruções tem parâmetros numerados de 1 a 21; as da primeira instrução INSERT estão numeradas de 1 a 5 e as da última instrução INSERT estão numeradas 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 mais informações sobre parâmetros, consulte Parâmetros da Instrução, mais adiante nesta secção.