Vamos ver agora como seria a criação de um procedimento armazenado que envia um e-mail para uma pessoa com um título e uma mensagem predefinidos. Iremos numerar as linhas abaixo apenas para explicar o que significa cada linha, essa numeração não existe na prática.
Clique sobre os números para ver a explicação.
- 1. CREATE PROCEDURE EnviaEmail (IN ID_Destinatario INTEGER, OUT Erro VARCHAR(100))
- 2. RETURNS BOOLEAN
- 3. BEGIN
- 4. DECLARE EnderecoEmail VARCHAR(100);
- 5. DECLARE TituloEmail VARCHAR(100);
- 6. DECLARE TextoEmail VARCHAR(4000);
- 7. DECLARE ConseguiuEnviar BOOLEAN;
- 8. SELECT “Olá, este é o título do e-mail” INTO TituloEmail;
- 9. SELECT “Este é o texto do e-mail. Bem-vindo ao mundo do SQL!” INTO TextoEmail;
- 10. SELECT Email INTO EnderecoEmail FROM Pessoa WHERE ID_Pessoa = ID_Destinatario;
- 11. IF EnderecoEmail IS NULL
- 12. THEN
- 13. ELSEIF EnderecoEmail = “” THEN
- 14. ELSE
- 14.1. Call SENDMAIL (EnderecoEmail, TituloEmail, TextoEmail, ConseguiuEnviar)
- 15. END IF;
- 16. IF NOT ConseguiuEnviar
- 16.1. THEN SELECT “Não foi possível enviar o e-mail” INTO Erro;
- 17. RETURN TRUE;
- 18. END;
Note que cada comando completo é encerrado por um sinal de ponto de vírgula. Alguns comandos são executados em uma única sequência, como comandos SELECT. Outros comandos, como cláusulas IF/THEN/ELSE possuem várias sequências, e apenas na instrução ENDIF é que deve aparecer o ponto e vírgula para encerrar a operação.
1. Indica a criação de um procedimento armazenado, de nome EnviaEmail, que possui um parâmetro de entrada do tipo inteiro de nome ID_Destinatario, e um parâmetro de saída do tipo varchar de nome Erro. Os parâmetros serão explicados no próximo subitem.
2. Indica que o procedimento irá retornar um valor booleano, V ou F, indicado se a operação foi executada a contento ou se houve algum erro. Se houver erro, um texto explicativo do erro ocorrido será armazenado na variável Erro da linha anterior.
3. Indica que ali começam as instruções do procedimento. Deve ser finalizado posteriormente pela instrução END.
4. Declara a variável EnderecoEmail, que será utilizada para armazenar o endereço de e-mail do destinatário.
5. Declara a variável TituloEmail, que será utilizada para armazenar o título do e-mail a ser enviado.
6. Declara a variável TextoEmail, que será utilizada para armazenar o conteúdo do e-mail a ser enviado.
7. Declara a variável ConseguiuEnviar, que será utilizada para definir se o procedimento conseguiu ou não enviar o e-mail.
8. Define um título para o e-mail, armazenando o valor descrito dentro da variável TituloEmail.
9. Define um texto para o e-mail, armazenando o valor descrito dentro da variável TextoEmail.
10. Pesquisa o banco de dados Pessoa, procurando pelo e-mail da pessoa que tem a chave primária ID_Pessoa informada pelo parâmetro ID_Destinatario (argumento do procedimento, veja linha 1). O endereço identificado será armazenado na variável EnderecoEmail.
11. Testa a variável EnderecoEmail, se ela for nula, significa que não existe pessoa no banco de dados para a chave primária informada como parâmetro.
12. Indica que ali começa uma sub-rotina para quando o teste anterior for verdadeiro (e-mail nulo).
12.1. Atribui mensagem de erro no parâmetro de saída do procedimento.
12.2. Atribui o valor falso como resultado do procedimento.
13. Em caso de o valor de endereço não ser nulo, realiza outro teste para verificar se o endereço de e-mail consultado no passo 10 está em branco. Se estiver em branco significa que a pessoa existe na base, mas não possui um e-endereço de e-mail cadastrado.
13.1. Atribui mensagem de erro no parâmetro de saída do procedimento.
13.2. Atribui o valor falso como resultado do procedimento.
14. Se o endereço de e-mail não for nulo nem em branco, então se inicia a rotina a seguir que irá enviar o e-mail.
14.1. Chama a função interna de envio de e-mail, passando os parâmetros já definidos, e recebendo um V ou F no último parâmetro para identificar se conseguiu enviar ou não o e-mail.
15. Encerra o IF da linha 11.
16. Realiza um último teste para avaliar se conseguiu enviar o e-mail.
16.1. Atribui a mensagem de erro para o parâmetro de saída do procedimento.
17. Retorna verdadeiro, indicando que o procedimento executou com sucesso.
18. Encerra o procedimento.