Puede implementar esto mediante el uso de un Ref Cursor de tipado débil como tipo de retorno. Esto es especialmente fácil de implementar desde una interfaz de cliente usando JDBC, ya que el tipo de cursor devuelto se puede recorrer como cualquier resultado de consulta y los metadatos se pueden consultar desde ResultSet.getMetaData(). He aquí un ejemplo:
CREATE OR REPLACE PROCEDURE retrieve_info(field_id in integer, p_cursor in out sys_refcursor)
AS
BEGIN
open p_cursor for 'select * from emp';
END;
La consulta entre comillas podría ser cualquier cosa que devuelva cualquier tipo, para cualquier número de columnas.