Compartir a través de


Ejecución de lotes

Antes de que una aplicación ejecute un lote de instrucciones, primero debe comprobar si se admiten. Para ello, la aplicación llama a SQLGetInfo con las opciones SQL_BATCH_SUPPORT, SQL_PARAM_ARRAY_ROW_COUNTS y SQL_PARAM_ARRAY_SELECTS. La primera opción devuelve si las instrucciones de generación de recuento de filas y generación de conjuntos de resultados se admiten en lotes y procedimientos explícitos, mientras que las dos últimas opciones devuelven información sobre la disponibilidad de recuentos de filas y conjuntos de resultados en la ejecución con parámetros.

Los lotes de instrucciones se ejecutan a través de SQLExecute o SQLExecDirect. Por ejemplo, la siguiente llamada ejecuta un lote explícito de instrucciones para abrir un nuevo pedido de ventas.

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);  

Cuando se ejecuta un lote de instrucciones de generación de resultados, devuelve uno o varios recuentos de filas o conjuntos de resultados. Para obtener información sobre cómo recuperarlos, vea Varios resultados.

Si un lote de instrucciones incluye marcadores de parámetros, estos se numeran en orden de parámetro creciente, ya que están en cualquier otra instrucción. Por ejemplo, el siguiente lote de instrucciones tiene parámetros numerados de 1 a 21. Los de la primera instrucción INSERT se numeran de 1 a 5 y los de la última instrucción INSERT se numeran 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 obtener más información sobre los parámetros, vea Parámetros de la instrucción, más adelante en esta sección.