Esse artigo faz parte da revista Clube Delphi edição 39. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

Programando em InterBase e Firebird

Criação de stored procedures e triggers

Um dos recursos mais importantes de um sistema gerenciador de banco de dados é sem dúvida nenhuma sua capacidade de executar procedimentos internos e de disparar ações baseadas em eventos ocorridos em uma tabela – são as stored procedures e os triggers. Como não poderia deixar de ser, o InterBase e o Firebird (IB/FB) suportam bem ambos os recursos, fornecendo comandos especiais para serem utilizados nesses casos.

Indo além, o IB/FB permite que você use stored procedures como fonte de dados, ou seja, como se fossem tabelas do banco. São as select stored procedures (que chamaremos de "selecionáveis"). Além disso, a possibilidade de utilizar UDFs (funções definidas pelo usuário) aumenta ainda mais o poder e a funcionalidade das stored procedures e triggers.

Estrutura e criação de uma stored procedure

O comando utilizado para a criação de uma stored procedure (SP) é o CREATE PROCEDURE. Uma SP tem duas partes: cabeçalho e corpo. No cabeçalho, temos a definição do nome da SP, parâmetros de entrada (caso existam) e parâmetros de saída (caso a SP retorne valores). O corpo contém declarações de variáveis e comandos a serem executados. A estrutura é definida da seguinte maneira:

 

CREATE PROCEDURE nome_procedure (

  PARAMETRO1 TIPO,  /* lista de parâmetros de entrada */

  PARAMETRO2 TIPO)

RETURNS (

  RESULTADO1 TIPO, /* lista de parâmetros de saída */

  RESULTADO2 TIPO)

AS

  DECLARE VARIABLE VAR1 TIPO;

  DECLARE VARIABLE VAR2 TIPO;

  <... Outras declarações de variáveis ...>

BEGIN

  <... Corpo da stored procedure (comandos) ...>

END

Estrutura e criação de um trigger

Semelhante a uma stored procedure, um trigger também possui um cabeçalho e um corpo. No cabeçalho definimos a tabela à qual o trigger está associado e o tipo de evento que irá dispará-lo (veja os eventos suportados na Tabela 1). O corpo do trigger contém a declaração de variáveis e comandos a serem executados. Veja sua estrutura:

 

CREATE TRIGGER nome_trigger FOR nome_tabela

ACTIVE evento POSITION posição

AS

  DECLARE VARIABLE VAR1 TIPO;

  DECLARE VARIABLE VAR2 TIPO;

  <... Outras declarações de variáveis ...>

BEGIN

  <... Corpo do trigger (comandos)...>

END

 

Em triggers (mas não em SPs) é possível utilizar as variáveis de contexto NEW e OLD, que representam respectivamente os valores atuais e os anteriores dos campos da tabela em questão. Na Tabela 1, temos as situações onde cada variável de contexto pode ser utilizada. Você pode ter vários triggers definidos para um mesmo evento. Eles serão executados na seqüência definida pelo valor da cláusula POSITION.

Nota: se o valor de uma variável NEW for alterado em um evento Before Insert ou Before Update, esse valor não é refletido em triggers criados para o mesmo evento. Sendo assim, se por exemplo uma variável New.campo1 tiver seu valor original 0 alterado para 1, outros triggers definidos para o mesmo evento continuarão enxergando o valor 0.

 

Tabela 1. Eventos e variáveis de contexto

Evento

Momento em que é disparado

Variáveis de contexto

Before Insert

Antes de uma inserção

New

After Insert

Após uma inserção

New*

...

Quer ler esse conteúdo completo? Tenha acesso completo