Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho...

30
Hugo Pedro Proença, © 2007 Stored Procedures Stored Procedures À medida que a complexidade dos sistemas aumenta, torna-se cada vez mais difícil a tarefa de integrar o SQL com as aplicações cliente. Além disto, é necessário que todas as aplicações cliente conheçam minuciosamente a estrutura da base de dados. ld l d ú d did id Por outro lado, o elevado número de pedidos a partir de uma grande quantidade de clientes pode deteriorar o desempenho do sistema. Os procedimentos guardados no servidor (Stored Os procedimentos guardados no servidor (Stored procedures) são um mecanismo essencial na implementação de sistemas de bases de dados robustos.

Transcript of Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho...

Page 1: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

À medida que a complexidade dos sistemas aumenta, torna-se cada vez mais difícil a tarefa de integrar o SQL com as aplicações cliente.Além disto, é necessário que todas as aplicações cliente conheçam minuciosamente a estrutura da base de dados.

l d l d ú d did i dPor outro lado, o elevado número de pedidos a partir de uma grande quantidade de clientes pode deteriorar o desempenho do sistema.Os procedimentos guardados no servidor (Stored Os procedimentos guardados no servidor (Stored procedures) são um mecanismo essencial na implementação de sistemas de bases de dados robustos.

Page 2: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Os seus benefícios resultam primariamente do facto de serem executados no ambiente do servidor.

São executados em processos do servidor.Servidor contém os dadosNão será mais lógico que as rotinas de interacção Não será mais lógico que as rotinas de interacção com os dados sejam executadas no mesmo ambiente?Aproveitam mecanismos de optimização de desempenho disponibilizados pelo SGBDPodem devolver ou alterar valores e receber parâmetros de entrada.

Page 3: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored Procedures Stored Procedures -- VantagensVantagens

Desempenho

Ti i t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior capacidade de processamento em relação a um vulgar posto de trabalho.Eli i id d d últi l Elimina a necessidade de múltiplas transmissões de dados através da rede.São compilados aquando da primeira execução e depois g a dados n ma tabela de sistema É e depois guardados numa tabela de sistema. É também anexa informação sobre o melhor caminho para os dados.

Page 4: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored Procedures Stored Procedures -- VantagensVantagens

Separabilidade Cliente/Servidor

F ilit id tifi ã l t t f Facilitam a identificação clara entre as tarefas que devem ser executadas pelo lado do cliente e do servidor.

Cli t Cliente. Análise e interpretação dos resultadosCriação de pedidos

ServidorInteracção com a informação

Page 5: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored Procedures Stored Procedures -- VantagensVantagens

Segurança

T d õ i (i ã Todas as operações usuais (inserção, alteração, remoção, consulta) podem ser executadas a partir de stored procedures.

A li õ li t d i d it As aplicações cliente deixam de necessitar de um conhecimento completo e minucioso da estrutura da base de dados.

Page 6: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Definição

CREATE PROCEDURE <nome>[;versao][@<parametro1> <tipo> [=<default>] [OUT]...AS

<BLOCO T-SQL>

Page 7: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Exemplo

CREATE PROCEDURE selecciona_empregados

ASSELECT *FROM Empregados;

Este procedimento iria devolver todos os atributos de todas as instâncias de “Empregados”

Page 8: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Execução

Execute <nome_procedimento> @<parametro1>,...@<parametroN>p

Dentro de stored procedures podem-se executar todos os tipos de instruções T-SQL excepto blocos “CREATE “

Page 9: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Parâmetros

Flexibilizam a utilização de stored procedures. Deve ter-se em atenção que:

São locais aos procedimentos onde estão definidosD did d “@” i di Devem ser precedidos de “@” para indicar que se trata de um valor de um parâmetro e não outro objecto qualquer.

Page 10: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Parâmetros – EXEMPLO 1

Criação de um procedimento para devolver toda a informação acerca de determinado empregado:empregado:

CREATE PROCEDURE infEmpregado(@id int)AS

SELECT * SELECT * FROM EmpregadoWHERE Codigo=@id

Page 11: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Parâmetros – EXEMPLO 2

Criação de um procedimento para inserir informação relativa a um empregado

CREATE PROCEDURE insEmpregado(@id int CREATE PROCEDURE insEmpregado(@id int, @nome VARCHAR(80), @profissao int)ASINSERT INTO E d (@id @ )INSERT INTO Empregado(@id,@nome);INSERT INTO ProfEmpreg(@id,@profissao);

Page 12: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Parâmetros – Valores p/ Omissão

Pode-se definir um valor de omissão para cada um dos parãmetros:

CREATE PROCEDURE insEmpregado(@id int, @nome VARCHAR(80) @ fi i 5)VARCHAR(80), @profissao int = 5)ASINSERT INTO Empregado(@id,@nome)INSERT INTO ProfEmpreg(@id @profissao)INSERT INTO ProfEmpreg(@id,@profissao)

Neste caso, sempre que não fôr colocada a profissão do novo empregado, é-lhe atribuida a profissão com código “5”. profissão com código 5 .

Page 13: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Valores de RetornoValores de Retorno

Valores de RetornoPode-se retornar informação a partir de um procedimento de 5 formas distintas:

SELECT Deve ser utilizado exclusivamente como resposta aos pedidos de informação efectuados pelas aplicações cliente.PRINT Envio de mensagens não-criticas aos utilizadores (não aos programadores!)RAISEERROR Envio de mensagens críticas aos utilizadoresParâmetros de Saída e valor de retorno Enviados à aplicação cliente como indicativos de estado da execução.

Page 14: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Parâmetros de SaídaParâmetros de Saída

Correspondem a parâmetros passados por referência. O seu valor pode ser alterado dentro do procedimento e essa alteração terá dentro do procedimento e essa alteração terá efeito fora do âmbito do procedimento.Declaração

Na declaração do procedimento basta Na declaração do procedimento, basta colocar a palavra chave “OUTPUT” a seguir ao tipo de dados do parâmetro.

ExecuçãoExecuçãoAo executar o procedimento é necessário indicar que o parâmetro é de saída

Page 15: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Parâmetros de SaídaParâmetros de Saída

ExemploCREATE Procedure XYZ( @a int, @b int OUTPUT)OUTPUT)ASSELECT @b=10RETURNSerá necessário que, na declaração, seja colocad a explicitamente a informação de

é íque o parãmetro é de saída:DECLARE @v int, @zEXECUTE XYZ(@z, @v OUTPUT)( , )

Page 16: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Valores de RetornoValores de Retorno

Uso de “Return”Serve para terminar a execução de um procedimento, podendo disponibilizar um valor indicativo do estado de execução.Sintaxe

RETURN [<valor_inteiro>]O valor de retorno deve servir exclusivamente para o programador e nunca para o utilizador p p g pde uma aplicação-clientePode-se utilizar em qualquer ponto de um procedimento, sendo que as instruções que se p , q ç qlhe seguem não serão executadas.

Page 17: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Valores de RetornoValores de Retorno

O SGBD disponibiliza por omissão valores indicativos do estado relativo à execução d d di tde cada procedimento:

0 Execução com sucesso-1 Falta de um objectoj...99

Estes valores são sempre devolvidos mesmo que Estes valores são sempre devolvidos, mesmo que não exista a correspondente instrução “RETURN” dentro do procedimento.Cabe ao utilizador criar códigos que não Cabe ao utilizador criar códigos que não interfiram com os criados por omissão (Valores Naturais).

Page 18: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Valores de Retorno ImplícitosValores de Retorno Implícitos

– Exemplo 1:

CREATE procedure procedimento1asSELECT *FROM Empregado;

Declare @status intExecute @status=procedimento1SELECT @status

Page 19: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Valores de Retorno ExplícitosValores de Retorno Explícitos

– Exemplo 1:

CREATE procedure procedimento1asSELECT *FROM Empregado;RETURN 5;RETURN 5;

Declare @status intExecute @status=procedimento1SELECT @status

Page 20: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored ProceduresStored Procedures

Regras práticas:Atribua sempre que possível valores por omissãoDevolva valores de retorno significativosAvalie os valores de retorno após a execução de cada procedimentoV ifi @@ ó d bl l Verifique @@error após cada bloco que envolva alteração da informação.Crie os novos procedimentos off-lineNunca devolva informação da BD através de valores Nunca devolva informação da BD através de valores de retorno ou de procedimentos de saída

Page 21: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored Procedures Stored Procedures –– VariáveisVariáveis

Definição de variáveis– Dentro de um procedimento as

variáveis são definidas da seguinte forma:

• DECLARE @<nome> <Tipo>

– Exemplo:

• DECLARE @x VARCHAR(100); • DECLARE @x VARCHAR(100);

Page 22: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Stored Procedures Stored Procedures –– VariáveisVariáveis

Atribuição de variáveis– As variáveis são normalmente

atribuídas dentro de um bloco SQL atribuídas dentro de um bloco SQL através da instrução SELECT:

– Exemplos:

• SELECT @nome=‘João António’• SELECT @total=COUNT(*) FROM S C @tota COU ( ) O

Empregados• SELECT @x=1

Page 23: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Controlo de ExecuçãoControlo de Execução

A Linguagem T-SQL como extensão ao ANSI-SQL fornece um conjunto de instruções de controlo da execução de instruções de controlo da execução de blocos.

Estas instruções permitem transferir para dentro de procedimentos grande parte das operações de manuseamento e das operações de manuseamento e interacção com a informação.

Page 24: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Controlo de ExecuçãoControlo de Execução

Execução Condicional– Através das palavras-Chave “IF” e

“ELSE” pode-se condicionar a execução de determinado bloco .

– Forma:Forma:• IF <expressão>

<BLOCO>ELSE

<BLOCO>

Page 25: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Controlo de ExecuçãoControlo de ExecuçãoExecução Condicional

Tal como na generalidade das linguagens – Tal como na generalidade das linguagens estruturadas, quando um bloco é composto por mais que uma instrução deve ser delimitado pelas palavras-chave “BEGIN” e “END”

• Exemplo:

– IF @x>1BEGIN

INSERT INTO T(1)INSERT INTO R(2)INSERT INTO R(2)

END

Page 26: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Controlo de ExecuçãoControlo de ExecuçãoExecução Repetida

Pode se usar a palavra chave “WHILE” para – Pode-se usar a palavra-chave WHILE para definir uma condição que irá determinar o número de vezes que um bloco será executado.

– Forma:

• WHILE <expressão booleana>WHILE <expressão_booleana>BEGIN

<bloco>END

Page 27: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Controlo de ExecuçãoControlo de Execução

Execução Repetida

– A palavra-chave “BREAK” serve, como seria de esperar, para terminar a execução dentro do bloco iterativo onde estiver incluída.

– A palavra-chave “CONTINUE” servirá envia a execução para a avaliação da expressão booleana.

Page 28: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Controlo de ExecuçãoControlo de ExecuçãoVariáveis Globais

São definidas pelo Sistema Gestor de Bases de – São definidas pelo Sistema Gestor de Bases de Dados e têm alcance sobre todos os procedimentos criados.

– Nunca se podem declarar variáveis locais com o Nunca se podem declarar variáveis locais com o mesmo nome das variáveis de ambiente (globais)

– Acede-se ao seu valor através do uso de “@@”• @@ERROR Código de erro do ultimo bloco SQL• @@ROWCOUNT Número de linhas afectadas

pelo ultimo bloco.• @@TRANCOUNT Número total de transacções • @@TRANCOUNT Número total de transacções

activas do utilizador.

Page 29: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Tabelas TemporáriasTabelas TemporáriasÈ por vezes imprescindível a criação de tabelas temporárias para registarem valor que irão ser necessários posteriormente (mas ainda no âmbito p (do procedimento actual.– No entanto, o SGBD não permite a execução da

instrução “CREATE”– Nestas situações, podem-se criar tabelas

temporárias simplesmente através do uso do caracter #Exemplo:– Exemplo:

• INSERT INTO #t1SELECT * FROM Empregados

Page 30: Bases de Dados II.ppt [Modo de Compatibilidade]hugomcp/bd2/t05.pdf · 2007. 11. 15. · zDesempenho zTii t á i id d b d Tipicamente a máquina servidora de bases de dados tem maior

Hugo Pedro Proença, © 2007

Tabelas TemporáriasTabelas TemporáriasDa execução do bloco anterior resultaria uma nova tabela “#t” criada internamente na base de dados “temp” e que o utilizador pode aceder como se de outra tabela qualquer se tratassese de outra tabela qualquer se tratasse.– SELECT *

FROM #tÉ imprescindível que o utilizador apague É imprescindível que o utilizador apague explicitamente a tabela antes de terminar a execução do procedimentoDeve ter-se em atenção o retorno em casos e e te se e ate ção o eto o e casosimprevistos ou excepcionais.– Mesmo nestes, a eliminação da tabela deve ser

efectuada.