Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Creación de una vista SQL dinámica (https://www.clubdelphi.com/foros/showthread.php?t=26589)

lunatiko 27-10-2005 17:00:28

Creación de una vista SQL dinámica
 
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

Creación de vista
 
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.

Código SQL [-]
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



Código SQL [-]
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.


La franja horaria es GMT +2. Ahora son las 01:15:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi