Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2009
enriquillo enriquillo is offline
Registrado
 
Registrado: dic 2003
Posts: 3
Poder: 0
enriquillo Va por buen camino
Question Nombre de Tabla Por Parametros en Firebird

Hola amigos todos.

Me gustaria saber si es posibre que se pueda pasar el nombre de una tabla por parametros, ya sea a un query o a un procedimiento en una base de datos en firebird 2.1.

Por ejemplo:

declare variable Nombre_Tabla varchar(30);
declare variable Ano_Consulta Integer;

if (:Ano_Consulta < 2008) then
Nombre_Tabla = 'Datos_Viejos'
else
Nombre_Tabla = 'Datos_Nuevos'

Select campo1, campo2, campo3 from :Nombre_Tabla

Me gustaria saber si esto es posible hacerse.

Saludos y gracias anticipadas.

Enriquillo.
Responder Con Cita
  #2  
Antiguo 09-01-2009
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Exclamation

Saludos.

Es posible, pero debes de utilizar la sentencia EXECUTE STATEMENT.

Así que te recomiendo documentarte sobre la misma.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #3  
Antiguo 09-01-2009
enriquillo enriquillo is offline
Registrado
 
Registrado: dic 2003
Posts: 3
Poder: 0
enriquillo Va por buen camino
Muchas Gracias Amigo

Voy a intentar documentarme al respecto.

Luego posteo mis resultados.
Responder Con Cita
  #4  
Antiguo 09-01-2009
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Extension de SQL : EXECUTE STATEMENT
Implementa la capacidad de tomar una cadena como una sentencia dinámica SQL
válida y la ejecuta como si se hubiera enviado al motor.
Se peude utilizar en triggers y procedimientos almacenados.

Hay tres sintaxis:

Syntaxis 1
========

EXECUTE STATEMENT <string>;

Ejecuta <string> como una operacion SQL que no devuelve datos.

Se pueden ejecutar los siguientes comandos:

* Insert, Delete y Update.
* Ejecutar un procedimiento.
* Cualquier DDL (excepto Create/Drop Database).

Ejemplo:
Código SQL [-]
CREATE PROCEDURE DynamicSampleOne (Pname VARCHAR(100))
AS
DECLARE VARIABLE Sql VARCHAR(1024);
DECLARE VARIABLE Par INT;

BEGIN
SELECT MIN(SomeField) FROM SomeTable INTO :Par;
Sql = 'EXECUTE PROCEDURE ' || Pname || '(';
Sql = Sql || CAST(Par AS VARCHAR(20)) || ')';
EXECUTE STATEMENT Sql;
END

Sintaxis 2
=========

EXECUTE STATEMENT <string> INTO :var1, ., :varn;

Ejecuta <string> como una operación SQL que regresa una única fila.
Solo pueden ejecutarse SELECT's simples con esta sintaxis.

Ejemplo:
Código SQL [-]

CREATE PROCEDURE DynamicSampleTwo (TableName VARCHAR(100))
AS
DECLARE VARIABLE Par INT;

BEGIN
EXECUTE STATEMENT 'SELECT MAX(CheckField) FROM ' || TableName INTO :Par;
IF (Par > 100) THEN
  EXCEPTION Ex_Overflow 'Desbordamiento en ' || TableName;
END

Sintaxis 3
========

FOR EXECUTE STATEMENT <string> INTO :var1, ., :varn DO
<compound-statement>;

Ejecuta <string> como una operación que devuelve varias filas. Se puede
usar cualquier tipo de SELECT.

Ejemplo:
Código SQL [-]

CREATE PROCEDURE DynamicSampleThree (TextField VARCHAR(100), TableName VARCHAR(100))
  RETURNING_VALUES (Line VARCHAR(32000))
AS
DECLARE VARIABLE OneLine VARCHAR(100);

BEGIN
Line = '';
FOR EXECUTE STATEMENT 'SELECT ' || TextField || ' FROM ' || TableName
  INTO :OneLine
DO
  IF (OneLine IS NOT NULL) THEN
    Line = Line || OneLine || ' ';
SUSPEND;
END

N O T A S
=========
I. En todas las formas de este comando, la cadena DSQL no puede
contener ningún parámetro. Todas las variables deben sustituirse en
la parte estática del comando antes de llamar a EXECUTE STATEMENT.

EXECUTE STATEMENT es potencialmente peligroso, porque:

1. En tiempo de compilación no se verifica que la sentencia SQL sea correcta.
No se pueden verificar los valores devueltos (sintaxis 2 y 3)

2. No se pueden verificar dependencias para asegurarse que los objetos
utilizados en la sentencia SQL no sean borrados de la base de datos o
modificados de manera que la sentencio original ya no sea válida.
Por ejemplo, un DROP TABLE en la tabla que se utiliza dentro del comando
que se le pasa a EXECUTE PROCEDURE será aceptado como válido.
3. Por lo regular, las operaciones con EXECUTE STATEMENT son lentas debido a
que la setencia debe ser preparada cada vez que se usa este comando.


II. Si el procedimiento almacenado tiene privilegios especiales son algunos objetos,
la cadena que contiene la sentencia dinámica que se le pasa a EXECUTE STATEMENT
no los hereda. Los privilegios siguen siendo aplicables al usuario que utiliza el comando.

Original de :
Alex Peshkoff

Traducción: mía.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar procedimientos por su nombre y con parametros makina OOP 3 29-09-2016 18:06:55
Cambiar nombre tabla firebird Milperrimo Firebird e Interbase 1 11-12-2008 18:05:25
Variable en el nombre de la Tabla carlosegs11 SQL 1 16-06-2006 23:32:47
busqueda de un nombre en una tabla cmena Varios 5 04-05-2004 10:04:11
Pasar nombre de tabla en SP __cadetill Firebird e Interbase 4 19-09-2003 19:48:00


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


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