sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo devolver un conjunto de resultados/cursor de un bloque anónimo de Oracle PL/SQL que ejecuta Dynamic SQL?

Puede escribir una función PL/SQL para devolver ese cursor (o podría poner esa función en un paquete si tiene más código relacionado con esto):

CREATE OR REPLACE FUNCTION get_allitems
  RETURN SYS_REFCURSOR
AS
  my_cursor SYS_REFCURSOR;
BEGIN
  OPEN my_cursor FOR SELECT * FROM allitems;
  RETURN my_cursor;
END get_allitems;

Esto devolverá el cursor.

Asegúrate de no poner tu SELECT -Cadena entre comillas en PL/SQL cuando sea posible. Ponerlo en cadenas significa que no se puede verificar en tiempo de compilación y que debe analizarse cada vez que lo use.

Si realmente necesita usar SQL dinámico, puede poner su consulta entre comillas simples:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

Esta cadena debe analizarse cada vez que se llama a la función, lo que generalmente será más lento y ocultará los errores en su consulta hasta el tiempo de ejecución.

Asegúrese de usar variables de vinculación siempre que sea posible para evitar análisis difíciles:

  OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;