Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   FIrebird: Eliminar tablas segun un patron (https://www.clubdelphi.com/foros/showthread.php?t=77494)

apicito 01-02-2012 09:31:39

FIrebird: Eliminar tablas segun un patron
 
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:
Código:

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:
Código:

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

Cita:

Empezado por guillotmarc (Mensaje 424072)
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

Cita:

Empezado por apicito (Mensaje 424087)
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 ?.

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


La franja horaria es GMT +2. Ahora son las 21:36:17.

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