Usando Execute Statement em Stored Procedures no 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.
Trackbacks & Pingbacks
[…] 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!