sexta-feira, 26 de janeiro de 2007
Documentação de Nulos do Firebird
Documentação de Nulos do Firebird está liberada.
Notícia original: Firebird Null Guide is available. (Tradução Google aqui)
Postado por Unknown às 1/26/2007 08:00:00 PM 0 comentários
Marcadores: notícias
Liberado o Firebird 2.0.1 RC
| Firebird 2.0.1 Release Candidate 1 for Testing |
O time do Firebird disponibilizou o instador Windows and Linux kits of a Firebird 2.0.1 release candidate em uma área de pre-release. Mandem um Feedback para o Firebird-devel. |
Postado por Unknown às 1/26/2007 07:54:00 PM 0 comentários
Novidade DB FreeMagazine
Acaba de ser lançada a edição 9 da DB FreeMagazine, dedicada inteiramente ao 3º Firebird Developers Day!Clique aqui para acessar o site. |
Postado por Unknown às 1/26/2007 07:42:00 PM 0 comentários
Caixa troca InterBase por Firebird
O SEFIP - programa utilizado por milhões de empresas de todo o Brasil e distribuído pela Caixa Econômica Federal - passa a utilizar a partir da versão 8.3 o Firebird no lugar do InterBase, como banco de dados. Com isso, a base de servidores Firebird instalados no Brasil cresce em alguns milhares/milhões. |
Postado por Unknown às 1/26/2007 07:32:00 PM 0 comentários
quarta-feira, 24 de janeiro de 2007
DBTools Software libera versão do DBManager
DBTools Softwareanuncia adisponibilidade do DBManager Professional Enterprise Edition V3.4.2 e DBManagerStandard Edition V3.2.2. |
Postado por Unknown às 1/24/2007 06:06:00 PM 0 comentários
Mac News Network menciona Firebird
XpertMart, um ponto de venda e controle de inventário, desenvolvido para Mac agora roda em Mac Intel. A última atualização funciona com Firebird no Mac Intel.
Notícia original: Macnn
Postado por Unknown às 1/24/2007 05:54:00 PM 0 comentários
Marcadores: notícias
terça-feira, 23 de janeiro de 2007
Gatilhos (Triggers) no Firebird
Introdução
- Triggers são rotinas independentes (Stored Procedures especiais), que são conectadas a tabelas ou views.
- Uma trigger é automaticamente executada ("disparada") quando um registro é inserido, atualizado ou apagado de uma tabela ou view.
- Triggers nunca são chamadas diretamente, apenas por meio dos comandos INSERT, UPDATE ou DELETE.
- Triggers são escritas em Linguagem de Stored Procedures e podem ser usadas Exceções.
Vantagens
- Redução na manutenção das aplicações cliente.
- Você pode implementar um relatório de modificações para as tabelas.
- Generator's podem ser chamados automaticamente e seus valores atribuídos a campos.
- Notificação automática das aplicações pelo uso de Eventos.
Sintaxe básica
CREATE [OR ALTER] TRIGGER nome FOR nomedatabela
[ACTIVE | INACTIVE]
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
[OR {INSERT | UPDATE | DELETE}
[OR {INSERT | UPDATE | DELETE}]]
[POSITION numero]
AS <trigger_body>
- ACTIVE/INACTIVE: Uma trigger pode ser desativada, para desenvolvimento, por exemplo. Pode ser usado com o comando ALTER TRIGGER.
- BEFORE/AFTER: Indica ao sistema se a trigger deve ser disparada antes ou depois das operações de Insert/Delete/Update.
- POSITION: Ordem de chamada da Trigger. As Trigger's com menor número são disparadas primeiro. Trigger's com o mesmo numero são disparadas em ordem indefinida. A posição padrão é 0 (zero).
- trigger_body: Igual ao corpo de uma SP.
Diferenças para Stored Procedures
- As Varáveis de contexto (OLD.colname and NEW.colname) só podem ser usadas nas trigger's
- Trigger's não tem parâmetros IN e/ou OUT. Assim como não suportam os comandos SUSPEND e EXIT.
- NEW.colname: Novo valor da coluna nas operações de INSERT ou UPDATE.
- OLD.colname: Valor antigo da coluna disponível para as operações UPDATE or DELETE.
Variáveis de contexto
Nome da variável | Conteúdo |
---|---|
OLD.field | Valor do campo antes de insert/update/delete |
NEW.field | Novo valor para o campo em operações de INSERT ou UPDATE |
INSERTING | Verdadeiro se a trigger estiver sendo chamada por uma operação de INSERT |
UPDATING | Verdadeiro se a trigger estiver sendo chamada por uma operação de UPDATE |
DELETING | Verdadeiro se a trigger estiver sendo chamada por uma operação de DELETE |
Alterando e apagando triggers
- ALTER TRIGGER nome ACTIVE | INACTIVE: ativa/desativa uma trigger.
- ALTER TRIGGER name ...: Muda a definição da trigger.
- DROP TRIGGER name: Apaga a trigger. Não podem ser executado enquando a trigger estiver sendo executada.
- CREATE OR ALTER TRIGGER name ...: Cria a trigger se não existir e altera se existir.
Triggers e transações
- Trigger's rodam no contexto da sua transação, elas são tratadas como parte da operação atual.
- As ações que são disparadas pela trigger são desfeitas quando ocorre um ROLLBACK.
Exemplos
Insere um valor de Generator para um registro recentemente adicionado
CREATE TRIGGER Create_Log_ID FOR Logs
BEFORE INSERT
AS
BEGIN
NEW.ID = GEN_ID (LogIdGenerator, 1);
END;
Log Changes to the PRICE field
CREATE TRIGGER Log_Price_Upd FOR Articles
AFTER INSERT OR UPDATE
AS
BEGIN
IF INSERTING THEN
INSERT INTO PRICE_LOGS (ART_ID, ACTION, DATETIME, NEW_PRICE)
VALUES (NEW.ART_ID, 'I', 'NOW', NEW.PRICE);
ELSE
INSERT INTO PRICE_LOGS (ART_ID, ACTION, DATETIME, NEW_PRICE)
VALUES (NEW.ART_ID, 'U', 'NOW', NEW.PRICE);
END;
Pesquisa sem considerar maiúsculas e minúsculas
Suponha que você tenha uma tabela de empregados e queira habilitar uma pesquisa pelo último nome, independente de maiúscula e minúscula:CREATE TABLE EMPLOYEES (
EMPNO INTEGER NOT NULL PRIMARY KEY,
LASTNAME VARCHAR (50),
FIRSTNAME VARCHAR (50));
Agora inclua um novo campo LASTNAME_UPPER que conterá o LASTNAME em maiúscula. Você precisa informar o COLLATION para que o UPPER() funcione corretamente.
CREATE TABLE EMPLOYEES (
EMPNO INTEGER NOT NULL PRIMARY KEY,
LASTNAME VARCHAR (50) COLLATE DE_DE,LASTNAME_UPPER VARCHAR (50) COLLATE DE_DE,
FIRSTNAME VARCHAR (50) COLLATE DE_DE);
Now you need a trigger which will fill the LASTNAME_UPPER field at every INSERT or UPDATE operation. There is no need for your application to fill LASTNAME_UPPER.
CREATE OR ALTER TRIGGER BIU_EMPLOYEES FOR EMPLOYEES
BEFORE INSERT OR UPDATE
AS
BEGIN
NEW.LASTNAME_UPPER = UPPER (NEW.LASTNAME);
END;
Depois, você precisa de um índice para LASTNAME_UPPER para fazer que a pesquisa fique mais rápida:
CREATE INDEX IDX_EMPL_LASTNAME ON EMPLOYEES (LASTNAME_UPPER);
Agora você pode procurar por empregados usando um SELECT normal usando LASTNAME_UPPER ao invés de LASTNAME. Lembre-se de usar UPPER() no termo que será pesquisado:
SELECT EMPNO FROM EMPLOYEES WHERE LASTNAME_UPPER = 'HEYMANN';
Postado por Unknown às 1/23/2007 02:52:00 PM 0 comentários
Marcadores: definição de dados, geral
segunda-feira, 22 de janeiro de 2007
Stored Procedures em Firebird
Introdução
- "Stored Procedures", ou SP, são rotinas que rodam no servidor e podem ser chamadas pela aplicação cliente.
- Stored Procedures são pre-compiladas. Portanto, não é necessário mandar o comando pela rede para ser validado e executado. Elas são simplesmente executadas.
- Procedures podem possuir parâmetros e, assim como o SELECT, retornar dados de uma tabela.
Vantagens
- A aplicação cliente conterá apenas parte do código. Assim sua manutenção será simples e rápida.
- Fácil manutenção. Aplicações cliente não precisam ser recompiladas ou redistribuídas caso alguma alteração nas SP's seja feita.
- Ganho de performance pela diminuição do tráfego na rede.
Chamando Stored Procedures
- Stored Procedures podem executar uma ação e não retornar nenhum dado
- Procedures selecionáveis podem retornar tabelas, assim como o SELECT, ou Views. Pode ser usado como uma tabela em um comando SELECT:
- SELECT a, b FROM procedurename (params) ...
- Para habilitar a chamada de procedure o usuário deve antes atribuir direitos a ela:
- EXECUTE rights (granted by GRANT/REVOKE)
Declarando Stored Procedures
CREATE PROCEDURE name [(param1 datatype1, param2 datatype2, ...)]
[RETURNS (param3 datatype3, param4 datatype4, ...)]
AS BEGIN
<corpo>
END;
Sintaxe para declaração de uma variável
DECLARE VARIABLE variable datatype
(Os parâmetros de Entrada e Saída de uma SP são usados como variáveis)
SET TERM
Todo comando dentro da Stored Procedure deve terminar com um ; (Ponto e vírgula), a Procedure também. Para distinguir o ponto-e-vígula dentro da Procedure do ponto-e-vírgula de terminação da Procedure pode ser usado outro terminador. Isso pode ser feito usando o comando SET TERM:
SET TERM !! ;
CREATE PROCEDURE x AS BEGIN ... END !!
SET TERM ; !!
O primeiro "SET TERM" substitui o terminador padrão (;) pelo terminador (!!). A procedure contém declarações utilizando o terminador padrão (;). A procedure termina a sua própria declaração usando o "novo" terminador (!!). Depois disso, o símbolo de terminação volta a ser o padrão (;).
Criando, alterando e destruindo Stored Procedures
- Criar: CREATE PROCEDURE nome ...
- Alterar: ALTER PROCEDURE nome ... (o restante é igual ao comando CREATE PROCEDURE)
- Criar ou Alterar, dependendo da existência da SP: CREATE OR ALTER ...
- Apagar: DROP PROCEDURE nome. Só pode ser executada pelo done (owner) da SP.
Você só pode apagar SP, quando elas não são usadas pode outras SP's, Trigger's ou View's.
Exceções
- Criar: CREATE EXCEPTION nome “mensagem“
- Alterar: ALTER EXCEPTION nome “mensagem“
- Apagar: DROP EXCEPTION nome
Exemplos
/* --- Retornando um valor simples –----------------------------------- */
CREATE PROCEDURE Mul (a INTEGER, b INTEGER)
RETURNS (Result INTEGER)
AS BEGIN
Result = a * b;
END
/* --- Retornando uma tabela –--------------------------------- */
CREATE PROCEDURE CountTo10
RETURNS (Cnt INTEGER)
AS BEGIN
Cnt = 1;
WHILE (Cnt <= 10) DO BEGIN
SUSPEND; /* Return next line */
Cnt = Cnt + 1;
END;
END
Comandos
Comando | Descrição | Versão |
---|---|---|
BEGIN <statements> END | Compound Statement like in PASCAL | |
variable = expression | Assignment. "variable" can be a local variable, an "in" or an "out" parameter. | |
compound_statement | A single command or a BEGIN/END block | |
select_statement | Normal SELECT statement. The INTO clause must be present at the end of the statement. Variable names can be used with a colon preceding them. Example SELECT PRICE FROM ARTICLES | |
/* Comment */ | Comment, like in C | |
-- Comment | Single line SQL comment | 1.5.0 |
DECLARE VARIABLE name datatype [= startval] | Variable declaration. After AS, before the first BEGIN. | 1.5.0 (startval) |
EXCEPTION | Re-fire the current exception. Only makes sense in WHEN clause | 1.5.0 |
EXCEPTION name [message] | Fire the specified exception. Can be handled with WHEN. | 1.5.0 (message) |
EXECUTE PROCEDURE name arg, arg | Calling a procedure. arg's must be local variables. Nesting and recursion allowed. | |
EXIT | Leaves the procedure (like in PASCAL) | |
FOR select_statement DO | Executes "compound_statement" for every line that is returned by the SELECT statement | |
IF (condition) | IF statement, like in PASCAL | |
POST_EVENT name | Posts the specified event | |
SUSPEND | Only for SELECT procedures which return tables: Waits for the client to request the next line. Returns the next line to the client. | |
WHILE (condition) DO | WHILE statement. Like in PASCAL. | |
WHEN {EXCEPTION a | SQLCODE x | ANY} DO compound_statement | Exception handling. WHEN statements must be at the end of the procedure, directly before the final END. | |
EXECUTE STATEMENT stringvalue | Executes the DML statement in stringvalue | 1.5.0 |
EXECUTE STATEMENT stringvalue INTO variable_list | Executes Statement and returns variables (singleton) | 1.5.0 |
FOR EXECUTE STATEMENT stringvalue INTO variable_list DO compound_statement | Executes Statement and iterates through the resulting lines | 1.5.0 |
Postado por Unknown às 1/22/2007 05:40:00 PM 6 comentários
Marcadores: definição de dados, geral