loop for as400 adidas db2 db2400

as400 - db2 for loop



ResoluciĆ³n de nombre de tabla retrasada en vista (1)

Creo que es posible que pueda lograr lo que desea al incluir su definición de vista en una función de tabla SQL, algo así como

CREATE FUNCTION insteadofview (<parameters>) RETURNS TABLE (<columns>) ... RETURN SELECT <the rest of your view definition>

Dependiendo de cómo consulte su vista, probablemente deba pasar criterios de búsqueda en la función como parámetros, de lo contrario el rendimiento no será óptimo porque la función tendrá que devolver todas las filas de la consulta antes de que se puedan aplicar los argumentos de búsqueda.

De acuerdo con el manual , como ha notado las vistas en una tabla que se renombra, continúe apuntando al objeto de la tabla original. Sin embargo, las rutinas, incluidas las funciones de tabla, se invalidarán y sus planes se prepararán de nuevo la próxima vez que se invoquen, utilizando el nombre original de la tabla fuente.

No tengo forma de probar esto sin embargo.

Sintaxis completa para crear una función de tabla .

Tengo una vista sobre una mesa. Resulta que la mesa se mueve y se crea una versión actualizada de la misma cada noche. Esto garantiza que siempre haya una tabla del nombre esperado presente en la base de datos, pero no puedo encontrar la manera de que mi vista continúe apuntando a la versión actual de la tabla. La tabla que existió cuando se creó la vista es a la que termino señalando incluso después de que se mueve y se queda obsoleta.

ViewA:

select a, b, c from todays_table;

todays_table permanece actualizada todo el día, y por la noche cambia su nombre a todays_table01 . La vista A ahora apunta a todays_table01 y todays_table01 una nueva tabla llamada todays_table . De nuevo, todays_table es actual, pero ViewA ya no lo es.

¿Hay alguna manera de retrasar la resolución del nombre de la tabla hasta que se use la vista? No he podido EXECUTE IMMEDIATE para la instrucción SELECT . Creo que podría obtener una declaración de SQL dinámico funcionando si utilizara un cursor, pero nunca los he necesitado antes y no estoy seguro de si son la ruta correcta. Leí acerca de AUTO_REVAL pero creo que esto solo retrasaría la resolución hasta la primera vez que se usó la vista y que aún se quede obsoleta esa noche.

Podría, por supuesto, dejar de usar la vista y simplemente mover la consulta compleja a mi programa, pero hay muchos lugares en los que es necesario, así que me gustaría eliminar todas las demás soluciones antes de volver a caer en esto.

Sería ideal eliminar la tabla temporal y hacer que la tabla maestra reciba actualizaciones durante todo el día, pero esto está más allá de mi comprensión ya que no sé nada sobre RPG II y OCL.

Gracias por leer.

Editar por @Mr. La sugerencia de Llama, experimenté con el uso de sinónimos y alias para apuntar a la todays_table de todays_table y luego tener mi punto de vista al sinónimo. Desafortunadamente en este escenario, la vista usa el alias para resolver el nombre real de la tabla en la creación, por lo que la vista continúa apuntando a la todays_table cuando se renombra a todays_table01 , aunque el alias sigue todays_table referencia a todays_table .

Editar 2 Estoy aceptando la respuesta de @mustaccio porque funciona y sería un enfoque razonable para este problema si pudiera poner los parámetros en marcha donde lo necesitaran. Mi proyecto en particular requiere flexibilidad, así que de hecho voy a subirme al carro del proceso nocturno y agregar un programa para recrear mis puntos de vista luego de que el proceso ensucie sus referencias como sugirió @ danny117.

Sin embargo, gracias a todos los que respondieron, aprendí mucho sobre cómo todas estas piezas funcionan juntas.