PDA

Ver la Versión Completa : Creación de una vista SQL dinámica


lunatiko
27-10-2005, 17:00:28
Hola a todos:

Tengo una duda a ver si alguien me puede ayudar.

Estoy desarrollando una aplicación en Delphi y Oracle y necesito crear una vista pero en tiempo de programación no se el owner de una de las tablas a las que accede la vista. Es decir sería algo parecido a esto:

create or replace view vista
select campo1, campo2
from OWNER.tabla
where ....

donde OWNER sería una variable que recibiría el valor en tiempo de ejecución.

Alguién sabe si esto se puede hacer?

Gracias por adelantado!

Paoti
28-10-2005, 17:16:31
Claro que por supuesto que se puede hacer esa vista, y cualquier sentencia, incluso Procedimientos, funciones dinamicas.



una solución rápida sería esta:

Esta vista te devuelve el owner y el nombre vista

puedes usar tambien all_tables que te devuelve todas las tablas.


pero te recomiendo que trabajes con vistas.


select av.owner, av.view_name from all_views av;

Esto lo cargas en un combo o en un dbgrid para que seleccionenla vista con su respectivo owner.


Ahora una solución que se me ocurre seria que hagas un procedimiento almacenado que haga esto que tu dices, y como parametros de entra el nombre de la vista y su owner que te parece.


para hacerlo de forma dinamica. ahi te va este código



PROCEDURE BORRAR_VISTA( MYVISTA IN VARCHAR2)
DECLARE
sqlstr VARCHAR2(50);
tCursor PLS_INTEGER;
RetVal NUMBER;
BEGIN
sqlstr := 'DROP VIEW ' || MYVISTA ; -- AQUI CONSTRUYES TU SQL DINAMICO
tCursor := dbms_sql.open_cursor;
dbms_sql.parse(tCursor, sqlstr, dbms_sql.NATIVE);
RetVal := dbms_sql.execute(tCursor);
dbms_sql.close_cursor(tCursor);
END;




Y AQUI ES TODA LA SOLUCIÓN QUE SE ME OCURRE, COMO VEZ.



TE ADJUNTO UN LINK MUY BUENO SOBRE ORACLE.

http://www.psoug.org/reference/dbms_sql.html <-- sql dinamico

http://www.psoug.org/reference/ <--- indice.


si tienes más dudas al respecto aqui estamos todos para ayudarte a que te sea más sencillo todo.


Saludos cordiales desde Guadalajara, México

lunatiko
31-10-2005, 09:50:33
Hola Paoti, gracias por responder.

No es exactamente lo que andaba buscando, pero me va a servir. La verdad es que me explico fatal. Lo que yo buscaba por decirlo de alguna manera es una vista 'parametrizada' donde el parametro es el owner de una de las tablas (que lo obtengo de otra tabla según una condición determinada, si ya lo se muy retorcido ;-))) )

Según creo, lo que tu propones es eliminar y crear esa vista cada vez que se acceda a ella. Sería algo así:
1.- borrar_vista
2.- crear_vista
3.- select * from vista where ...

Creo que también me sirve esta solución. Muchas gracias por tu ayuda.