Executando SQL avançado via ISQL !

Firebird

21/06/2005

Eu tinha alguns problemas de atualização das bases de dados FB nos clientes após alguns dias de testes da aplicação quando o cliente ja tinha colocado alguns dados e não queria perder...
Agora eu mando por e-mail um script DOS muito pequeno que executa o que eu quiser de SQL via ISQL, e muito simples para o usuário, ele só executa o arquivo .cmd !

Ae vai !

Arquivo [b:c53816e15e]sql.cmd[/b:c53816e15e]

@echo off
rem Setando as variáveis !
set arq_log=´c:\meulog.log´
set arq_sql=´c:\isql.sql´
set password=masterkey
set banco=localhost:C:\dados.fdb
set sql=[i:c53816e15e]´c:\sql.sql´[/i:c53816e15e]
rem ============================================
rem caso o arquivo de exista, então será eliminado
rem ============================================
if exist ¬arq_log¬ goto apagalog
:inicio
rem ============================================
rem Estou criando um arquivo SQL com as sequencia de comandos
rem que serão executados no servidor Firebird/Interbase
rem ============================================
echo /* Estou criando um arquivo SQL vazio */ > ¬arq_sql¬
echo set names WIN1252; >> ¬arq_sql¬
echo set sql dialect 3; >> ¬arq_sql¬
echo commit; >> ¬arq_sql¬
echo set transaction; >> ¬arq_sql¬
echo /* Comeco do SQL */ >> ¬arq_sql¬
copy /A /B ¬arq_sql¬ + [i:c53816e15e]¬sql¬[/i:c53816e15e]
echo /* Fim do SQL */ >> ¬arq_sql¬
echo commit; >> ¬arq_sql¬
echo quit; >> ¬arq_sql¬
rem ============================================
rem Agora vou executar o ´isql´ e fazer com que execute o SQL
rem ============================================
echo Executando stored procedure...
´C:\Arquivos de programas\Firebird\Firebird_1_5\bin\isql.exe´ ¬banco¬ -u SYSDBA -p ¬password¬ -page 4096 -i ¬arq_sql¬ -o ¬arq_log¬
rem ============================================
rem Se ocorreu tudo OK, então apaga-se o arquivo de log e finaliza
rem ============================================
if errorlevel 1 goto fim
if errorlevel 0 goto apagalog
:apagalog
del ¬arq_log¬
:fim
del ¬arq_sql¬
echo Fim

-------------------

O arquivo [b:c53816e15e]sql.sql[/b:c53816e15e] você coloca qualquer instrucao sql que quer e ela vai ser executada direto na base!

Um arquivo [b:c53816e15e]sql.sql[/b:c53816e15e] exemplo !

SET TERM ^ ;

/* Stored procedures definition */

ALTER PROCEDURE SP_NOVOPRODUTO_ESTOQUE (
CODIGO INTEGER,
TABELA VARCHAR (40) CHARACTER SET WIN1252,
DESCRICAO VARCHAR (80) CHARACTER SET WIN1252)
AS
DECLARE VARIABLE COD INTEGER;
BEGIN
/* VERIFICA SE O PRODUTO EXISTE EM ESTOQUE */
SELECT ID_PRODUTO FROM PRODUTOS WHERE ID_PRODUTO = :CODIGO
INTO :COD;
/* SE NÃO EXISTIR O PRODUTO EM ESTOQUE */
IF (COALESCE(COD,0) = 0) THEN
INSERT INTO PRODUTOS (ID_PRODUTO, TIPO_PRODUTO, DESCRICAO)
VALUES (:CODIGO, :TABELA, :DESCRICAO);
ELSE
UPDATE PRODUTOS SET DESCRICAO = :DESCRICAO WHERE ID_PRODUTO = :CODIGO;
EXIT;
END ^

SET TERM ; ^

---------------------

Eu utilizei alguns conceitos do artigo da ActiveDelphi e dei uma modifica para ficar um pouco mais genérico!

Esse tipo de arquivo é muito pequeno a soma dos dois não chega a 4Kb, portanto, acho um meio muito mais rápido para implementaçao de sql direto no banco. Como o artigo da ActiveDelphi fala , da para usar esse tipo de dica para se fazer backup usando o gbak.exe tbm em linha de comando e colocando no agendador de tarefas do windows!

Como esse dica resolveu muitos problemas para mim espero ter ajudado vcs em algo!!!!

Um abraço !


Luizito

Luizito

Curtidas 2
POSTAR