Usando Execute Statement em Stored Procedures no InterBase XE

InterBase XE

Entre as várias novidades do InterBase XE está a possibilidade de montar SQLs dinamicamente em Stored Procedures através do comando EXECUTE STATEMENT, esse recurso é uma solicitação antiga de muitos usuários, vamos ver como funciona.

Existe três variações do EXECUTE STATEMENT, aquela que não retorna nenhum registro ou dado, um registro ou um dado retornado e aquele retorna vários registros, vejamos alguns exemplos:

Nenhum registro ou dado retornado

A stored procedure abaixo (EXEC_STMT_NO_RET) irá executar uma stored procedure em seu código, o nome dá stored procedure será passado dinamicamente como parâmetro.

CREATE PROCEDURE EXEC_STMT_NO_RET (proc_name varchar(20))
AS
  Declare Variable EMPNO INTEGER;
  Declare Variable EXECSTMT VARCHAR(150);
BEGIN

   Select MAX(EMP_NO) from EMPLOYEE into EMPNO;

   EXECSTMT = 'EXECUTE PROCEDURE' || proc_name || '( ' || cast (EMPNO as varchar(10)) || ')';

   EXECUTE STATEMENT EXECSTMT;

END

A variável EXECSTMT recebe o comando que deverá ser executado pelo EXECUTE STATEMENT.

Apenas um registro retornado

A procedure abaixo (EXEC_STMT_COUNT) retornar a quantidade de registros de uma tabela, o nome da tabela é passado como parâmetro na hora da execução da stored procedure, sendo que é um SELECT COUNT sempre teremos o retorno como sendo um registro com uma coluna que traz o total de registros da tabela.

CREATE PROCEDURE EXEC_STMT_COUNT (TABLE_NAME VARCHAR(50))
AS
Declar Variable MAXEMPNO INTEGER;
BEGIN
   EXECUTE STATEMENT 'SELECT COUNT(*) FROM ' || TABLE_NAME INTO :MAXEMPNO;
END

Qualquer quantidade de registros retornado

Neste exemplo passamos a tabela e o nome do campo que queremos que seja retornado pela stored procedure, não sabemos quantos registros serão retornados, definimos dinamicamente todo o SQL.

CREATE PROCEDURE EXEC_STMT_ANY (TABLE_NAME VARCHAR(50), STR_FIELD VARCHAR(100) ) RETURNS (INT_RETVAR INTEGER)
AS
  Declare Variable IFIELD VARCHAR(100);
BEGIN
   FOR EXECUTE STATEMENT 'SELECT ' || STR_FIELD || ' FROM ' || TABLE_NAME INTO :IFIELD DO
      // Implemente seu código aqui para cada registro antes de retornar esta linha para o lado cliente

      SUSPEND;
END

Esses são 3 exemplos de como utilizar EXECUTE STATEMENT, lembre-se que ao usar sentenças dinâmicas o mesmo será preparado (Prepared) a cada execução, isso irá impactar na performance da procedure, quando a sentença já está definida na procedure isso não ocorre.

1 responder

Trackbacks & Pingbacks

  1. […] This post was mentioned on Twitter by Andreano Lanusse, Embarcadero Asia. Embarcadero Asia said: Usando Execute Statement em Stored Procedures no InterBase XE http://bit.ly/bLbL0w […]

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.