Compartilhar via


Lotes em execução

Antes de um aplicativo executar um lote de instruções, ele deve primeiro verificar se elas têm suporte. Para fazer isso, 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 de geração de contagem de linhas e de geração de conjunto de resultados têm suporte em 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 em execução parametrizada.

Lotes de instruções são executados por meio de SQLExecute ou SQLExecDirect. Por exemplo, a chamada a seguir executa um conjunto de instruções explícito para abrir um novo pedido de vendas.

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 de geração de resultados é executado, ele retorna uma ou mais contagens de linhas ou conjuntos de resultados. Para obter informações sobre como recuperá-los, consulte Vários Resultados.

Se um lote de instruções incluir marcadores de parâmetro, eles serão numerados em ordem de parâmetro crescente como estão em qualquer outra instrução. Por exemplo, o lote de instruções a seguir tem parâmetros numerados de 1 a 21; aqueles na primeira instrução INSERT são numerados de 1 a 5 e aqueles na ú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, consulte Parâmetros de Instrução, mais adiante nesta seção.