PDA

Ver la Versión Completa : FIrebird: Eliminar tablas segun un patron


apicito
01-02-2012, 09:31:39
Haber si alguien me puede ayudar con este sql:
Quiero borrar todas tablas segun un padron. Por ejemplo, todas las que empizen por 'DIA_'.
He probado varias cosa, como por ejemplo:
drop table in (select RDB$RELATION_NAME from RDB$RELATIONS where
RDB$RELATION_NAME starting with 'DIA_')
Pero la primera parte de esto no funciona, ya que la subconsulta funciona correctamente si se hace de forma indenpendiente.
Aguna sugerencia?
Gracias.

guillotmarc
01-02-2012, 09:42:59
Hola.

Prueba utilizando el EXECUTE STATEMENT y construyendo en un bucle las sentencias de las tablas a eliminar.

Saludos.

apicito
01-02-2012, 12:10:51
No he utilizado nunca EXECUTE STATAMENT pero mirando en los foros entiendo que se utiliza para crear procedimientos almacenados. ¿EStoy entendiendolo bien? Y lo que busco es crear un script sql para ejecutar en el IbExpert.
He probado:

declare tabla varchar(15);
declare borra varchar(100) = 'drop table :tabla';
begin
for select RDB$RELATION_NAME from RDB$RELATIONS where
RDB$RELATION_NAME starting with 'EXPRH'
do
execute statement (borra) (tabla := RDB$RELATION_NAME);
end;

y me da error de ejecución. No reconoce el delclare.

guillotmarc
01-02-2012, 12:46:24
Hola.

Exacto, deberías usarlo en un procedimiento almacenado. Aunque eso no tiene porqué ser ningún inconveniente. Tu script sql puede crear el procedimiento almacenado (create procedure ... ...), ejecutarlo (execute procedure ... ...) y finalmente eliminarlo (drop procedure ... ...).

Respecto al problema que tienes con la declaración de variables, este tipo de declaraciones van dentro de un procedimiento almacenado (el IB-Expert ya creará por ti la sección declare).

Saludos.

apicito
01-02-2012, 12:50:19
Ya... Necesitaba hacerlo sin procedimiento almacenado.
Gracias de todos modos. Esperaré a ver si alguien me puede orientar.
Todo esto es para evitar meter en un sql con un churro de drop table.

guillotmarc
01-02-2012, 15:16:14
Hola.

¿ Quieres ejecutar un Script SQL en el IB-Expert pero no quieres que tenga procedimientos almacenados ?.

¿ Porqué razón ?, como ya te he comentado, el procedimiento almacenado no tiene porqué existir previamente, lo puedes crear y destruir en el mismo script en que se ejecuta.

Saludos.

apicito
01-02-2012, 20:26:24
Hola.
¿ Quieres ejecutar un Script SQL en el IB-Expert pero no quieres que tenga procedimientos almacenados ?.

Si. Desde una aplicación de escritorio tengo una opción que es cargar scripts sql que se ejecutan contra la base de datos a la que está conectado. Lo utilizo para harcer mantenimientos específicos para algun cliente. Por esto lo del script y no ir creando procedimientos para cada cosa que hago con este sistema.

guillotmarc
02-02-2012, 10:33:09
Si. Desde una aplicación de escritorio tengo una opción que es cargar scripts sql que se ejecutan contra la base de datos a la que está conectado. Lo utilizo para harcer mantenimientos específicos para algun cliente. Por esto lo del script y no ir creando procedimientos para cada cosa que hago con este sistema.

Perfecto.

Ya se que me estoy repitiendo más que el ajo, :), pero ¿ de verdad has entendido la parte de que dentro de un único Script puedes crear un procedimiento almacenado, ejecutarlo y finalmente eliminarlo para que toda la estructura de la base de datos vuelva a estar como al principio ?.


SET TERM ^ ;

CREATE PROCEDURE ACTUALIZA_CLIENTES (
as
begin
UPDATE CLIENTES SET TELEFONO = '+34-' || TELEFONO;
end
^

SET TERM ; ^

EXECUTE PROCEDURE ACTUALIZA_CLIENTES;

COMMIT WORK;

DROP PROCEDURE ACTUALIZA_CLIENTES;