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

¿Puede una consulta SQL de Oracle ejecutar una consulta de cadena seleccionada de una tabla?

En general, este no es un diseño particularmente bueno:almacenar SQL en tablas y ejecutarlo dinámicamente presenta todo tipo de problemas de seguridad y mantenimiento.

Probablemente sea posible (aunque es demasiado tarde en un viernes que comenzó demasiado temprano para tratar de resolverlo) hacer una consulta XML realmente genial en la línea de esta consulta que ejecuta un conteo (*) contra cada tabla en el esquema que haría todo esto en una consulta.

Sin embargo, para la gran mayoría de los programadores, el enfoque más simple sería recorrer las consultas, ejecutarlas una a la vez y almacenar los resultados en algún lugar. Potencialmente, la variable local se agregaría a una colección de recuentos, por ejemplo.

FOR q IN (SELECT sql_text FROM query_table)
LOOP
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || q.sql_text || ')'
     INTO some_local_variable;
  <<do something with the local variable>>
END LOOP;

Como está tratando de crear una vista, podría tomar esta lógica y ponerla en una función de tabla canalizada. Harías una PIPE ROW para devolver datos dentro del bucle. Luego, su vista podría crearse sobre la función de tabla segmentada.