Es muy raro que desee utilizar explícitamente cursores en PostgreSQL, incluso al procesar los resultados de la consulta en plpgsql. Este es un contraste marcado de muchas otras bases de datos SQL donde se usan casi todo el tiempo.
En plpgsql simplemente podría escribir algo como:
DECLARE
emp employee%rowtype;
BEGIN
FOR emp IN SELECT * FROM employee LOOP
IF emp.active THEN
RAISE INFO 'Active: %', emp.employee_id
END IF;
END LOOP;
END
En lo anterior, las ofertas plpgsql manejador de lenguaje con apertura, encuadernación, ir a buscar y cierre en sí (más en declarations y control structures).
Con PostgreSQL desde 9.0, puede simplemente ejecutar plpgsql usando un bloque "DO". Para versiones anteriores, necesita crear una función y seleccionarla. Si está buscando el equivalente PostgreSQL de, por ejemplo, iterar a través de un resultado con un cursor en SQL Server, eso es lo que es. Tenga en cuenta que la iteración, etc., es , no parte del dialecto SQL, solo parte de plpgsql (o cualquiera de los otros idiomas procesados).
La sintaxis "DECLARE CURSOR xxx" en el nivel de SQL puede usarse como esto:
DECLARE cur_employees CURSOR FOR SELECT * FROM employee;
FETCH NEXT FROM cur_employees;
// etc..
CLOSE cur_employees;
Esto puede ser usado para obtener cuidado sólo una parte del conjunto de resultados de la consulta. Sin embargo, no es habitual utilizarlos, ya que normalmente el controlador del cliente proporcionará algún tipo de funcionalidad para hacerlo (por ejemplo, conjuntos de resultados desplazables en JDBC). También puede devolver cursores desde funciones similares a Oracle, aunque nuevamente es un caso de uso comparativamente raro.
Comience añadiendo una cláusula WHERE que seleccione las activas. – aib
Lea el [capítulo sobre cursores en el manual] (http://www.postgresql.org/docs/9.1/interactive/plpgsql-cursors.html). –
Hice lo que me dijo: DECLARE cur_employees cursor para SELECT * DE empleado donde = activos 'activos' cur_employees CERRAR pero yo estoy recibiendo el siguiente error: – Karl