Uso de la compatibilidad con instrucciones preparadas - Amazon Redshift

Uso de la compatibilidad con instrucciones preparadas

El controlador JDBC de Amazon Redshift admite instrucciones preparadas. Puede utilizar instrucciones preparadas para mejorar el rendimiento de las consultas basadas en parámetros que deban ejecutarse varias veces durante la misma conexión.

Una instrucción preparada es una instrucción SQL que se compila en el lado del servidor pero que no se ejecuta de inmediato. La instrucción compilada se almacena en el servidor como un objeto PreparedStatement hasta que se cierra dicho objeto o la conexión. Mientras exista ese objeto, se puede ejecutar la instrucción preparada tantas veces como sea necesario con distintos valores de parámetros, sin necesidad de volver a compilar la instrucción. Gracias a esta reducción de la sobrecarga, el conjunto de consultas se ejecuta con mayor rapidez.

Para obtener más información acerca de las instrucciones preparadas, consulte “Uso de instrucciones preparadas” en el Tutorial sobre conocimientos básicos de JDBC de Oracle.

Puede preparar una instrucción que contenga varias consultas. Por ejemplo, la siguiente instrucción preparada contiene dos consultas INSERT:

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO MyTable VALUES (1, 'abc'); INSERT INTO CompanyTable VALUES (1, 'abc');");

Asegúrese de que estas consultas no dependan de los resultados de otras consultas que se hayan especificado dentro de la misma instrucción preparada. Como las consultas no se ejecutan durante el paso de preparación, los resultados aún no se han devuelto y no se encuentran disponibles para las demás consultas en la misma instrucción preparada.

Por ejemplo, no se permite la siguiente instrucción preparada, en la que se crea una tabla y, a continuación, se insertan valores en esa tabla recién creada:

PreparedStatement pstmt = conn.prepareStatement("CREATE TABLE MyTable(col1 int, col2 varchar); INSERT INTO myTable VALUES (1, 'abc');");

Si se intenta preparar esta instrucción, el servidor devuelve un error en el que se indica que la tabla de destino (myTable) aún no existe. La consulta CREATE se debe ejecutar antes de que se pueda preparar la consulta INSERT.