Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Oracle
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-10-2005
lunatiko lunatiko is offline
Miembro
 
Registrado: oct 2004
Posts: 17
Poder: 0
lunatiko Va por buen camino
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!

Responder Con Cita
  #2  
Antiguo 28-10-2005
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 22
Paoti Va por buen camino
Post 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
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz

Última edición por Paoti fecha: 28-10-2005 a las 18:36:28. Razón: ETIQUETAS SQL
Responder Con Cita
  #3  
Antiguo 31-10-2005
lunatiko lunatiko is offline
Miembro
 
Registrado: oct 2004
Posts: 17
Poder: 0
lunatiko Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:07:00.


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
Copyright 1996-2007 Club Delphi