Compartilhar via


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.