Procedures Básico
Identificação
Parceiro:
Número da FAP: Número da OS:
Objetivos
Descrever conceitos básicos para o uso de Procedures no Sankhya.
O que é Stored Procedure?
Uma procedure é um objeto de banco que pode ser executado através de chamada
pelo seu nome, em que podem ser executados quaisquer tipos de blocos de códigos,
retornando ou não valores.
Normalmente procedures são utilizadas para construir execuções de uma ou mais
tarefas especificas padronizadas que poderão ser realizadas em vários momentos
diferentes.
Um bom exemplo seria uma procedure para registro de um LOG de erros, onde toda
vez que ocorre um erro em algum objeto (uma trigger por exemplo ou até outra
procedure) a procedure que registra o LOG seja chamada (executada) para gravar o
LOG numa tabela de LOG’s.
Conceitos Básicos?
Uma procedure é formada por um cabeçalho, pelos parâmetros recebidos ou
retornados, pela declaração das variáveis e o bloco de código que será executado.
Dentro de uma procedure não temos qualificadores (:NEW e :OLD) como nas
triggers. Isso porque uma procedure não é vinculada a uma Tabela (como são as
triggers). Sendo assim para encontrar informações necessárias dentro do código,
temos que usar querys e gravar os resultados em variáveis.
1
Procedures Básico
Exemplo:
Em uma procedure é possível realizar operações de Insert, Update e/ou Delete em
qualquer tabela do banco.
Evento de Acionamento?
O evento de acionamento de uma procedure é sempre uma chamada através do seu
nome e de seus parâmetros.
Por exemplo se estamos executando uma trigger e precisamos acionar uma
procedure dentro dela, declaramos o nome da procedure e os seus parâmetros entre
parênteses.
Exemplo:
Estrutura Básica de uma Procedure
- Informar ao banco de dados qual objeto está sendo criado e dar um nome
para o objeto.
CREATE OR REPLACE PROCEDURE “NOME_DA_SUA_PROCEDURE”
- Junto ao nome, declarar os parâmetros e seus tipos separados por vírgula
entre parênteses e seguido da estrutura “AS”.
NOME_DA_SUA_PROCEDURE(P_NUNOTA NUMBER, P_OBS VARCHAR2, P_DATA
DATE) AS
- Inserir o bloco de declarações de variáveis entre as estruturas “AS” e
“BEGIN”
AS
VARIAVEL1 TIPO;
2
Procedures Básico
VARIAVEL2 TIPO;
BEGIN
- Inserir o bloco onde ficará o código a ser executado entre as estruturas
“BEGIN” e “END”.
BEGIN
AQUI VAI O CÓDIGO QUE SERÁ EXECUTADO;
END;
- Juntando tudo, temos:
Parâmetros de Retorno
Conforme foi descrito acima, uma procedure pode ter um ou mais parâmetros de
retorno. Isso é utilizado quando necessitamos de acordo o que ocorrer dentro da
procedure receber alguma informação de volta e utilizá-la no objeto responsável
pela chamada.
Para que haja retorno é necessário que o parâmetro a ser retornado seja
declarado no cabeçalho da procedure seguido da estrutura “OUT”.
Exemplo:
Nesse caso temos um parâmetro de retorno chamado P_RETORNO do tipo
VARCHAR2, ou seja, poderemos retornar um texto através desse parâmetro para o
objeto que fez a chamada.
3
Procedures Básico
No caso da chamada, a única modificação é que deve ser acrescentado uma
variável que receberá o retorno da procedure.
Exemplo:
Exemplo de Procedures:
- Exemplo da Chamada sem Retorno:
Passando os parâmetros diretamente na chamada:
Passando os parâmetros via variáveis:
4
Procedures Básico
- Exemplo da Procedure sem Retorno:
No exemplo acima, quando a procedure for acionada ela irá fazer a inserção dos
registros na tabela TABELA_LOG de acordo com os parâmetros que foram
passados na chamada.
- Exemplo da Chamada com Retorno:
Passando os parâmetros diretamente na chamada:
Passando os parâmetros via variáveis:
5
Procedures Básico
- Exemplo de Procedure com Retorno:
No exemplo acima, o sistema também realiza o registro do LOG na Tabela
TABELA_LOG.
A diferença é que nesse caso existe um parâmetro de retorno (no caso
P_RETORNO) que recebe a mensagem “LOG GRAVADO COM SUCESSO” se tudo
ocorreu corretamente ou “ERRO NA GRAVAÇÃO DO LOG” se houve algum erro na
tentativa de inserir os dados na tabela TABELA_LOG.
O Valor gravado no parâmetro P_RETORNO é devolvido para o objeto que fez a
chamada ao final da execução da procedure. Nesse caso é recebido de volta pela
variável V_RETORNO que está na chamada da procedure.
6
Procedures Básico
Observações
Nome da Procedure
- Costuma-se no nome da procedure colocar o prefixo STP (de Stored
Procedure), colocar alguma nomenclatura que resuma o objetivo da procedure e
terminar com algo que identifique o cliente (Exemplo: CEP de Cepêra, ART de
Artivinco, ANH de Anhanguera etc.).
Exemplo:
STP_INSERE_LOG_CEP = Procedure para inserção de LOG no cliente Cepêra.
STP_CALC_FRETE_ART = Procedure para cálculo de Frete no cliente Artivinco.
Identificação das Procedures
- Para facilitar verificações futuras, é necessário colocar um trecho de
identificação na procedure, onde haja um resumo do seu objetivo, data que foi
criada, autor etc.
Esse trecho normalmente é colocado logo após o BEGIN.
Exemplos:
7
Procedures Básico
Procedures no Sankhya-W
No Sankhya-W, utilizamos procedures para várias execuções dentro da aplicação,
dentre elas as principais são “Ações Agendadas” e “Ações” (Botões de Ação).
- Ações Agendadas:
- Para ações agendadas, o sistema não tem um modelo padrão de
procedure para ser utilizado, sendo assim é livre o desenvolvimento do código
dentro da procedure para utilização.
- Após o desenvolvimento basta cadastrar a procedure na tela ação
agendada realizando a configuração da expressão de tempo para execução.
Exemplo:
- Para a expressão de tempo é possível cadastrar uma expressão do CRON,
onde o sistema irá executar a procedure de acordo com ela ou cadastrar um
intervalo de tempo (em segundos, minutos ou horas) para execução.
8
Procedures Básico
Exemplo CRON:
Nesse caso a procedure será executada todos os dias as 18h.
Exemplo Intervalo de Tempo:
Nesse caso a procedure será executada de duas em duas horas.
- Botões de Ação:
- Os botões de ação proporcionam vários tipos de execuções em inúmeras
telas do sistema.
9
Procedures Básico
- Para utilização basta cadastrar um botão na aba “Ações” do dicionário de
dados ou do construtor de telas relacionado a tabela que será usada como base
para criação do botão.
Nesse cadastro os itens abaixo são obrigatórios:
- Descrição: Nome do botão de ação
- Tipo: Nesse caso “Rotina de Banco de Dados”
- Nome da Rotina: Nome da procedure que será criado no Banco de
dados.
- Depois de executar, recarregar: Esse campo serve para definir como
será o carregamento da tela após a execução do botão.
- Parâmetros: Nesse ponto conseguimos realizar o cadastro de um ou
mais parâmetros que poderão ser usados na execução da procedure. Esses
parâmetros serão apresentados ao usuário quando ele clicar no botão de ação
através de um Pop-up na tela.
Exemplo:
O Botão “+” ao lado do nome da rotina é responsável por gravar o objeto com o
nome escolhido no banco.
Esse objeto tem um padrão pré-definido.
10
Procedures Básico
Exemplo:
Sobre o código do Objeto:
- Os parâmetros criados na tela são apresentados no objeto com o prefixo
“PARAM”, ou seja, o parâmetro P_NOME criado no exemplo se transforma em
PARAM_P_NOME.
11
Procedures Básico
- Os botões de ação são vinculados a uma Tabela e sendo assim os campos
que fazem parte da PK da tabela são apresentados no código com o prefixo
“FIELD”, ou seja, o campo CODEND da TGWEND se transforma em
FIELD_CODEND, o campo NUNOTA da TGFCAB se transforma em FIELD_NUNOTA
etc.
- Dentro da procedure existe um LOOP principal onde o sistema executa o
código que está contido dentro desse LOOP para cada registro que foi
selecionado na tela pelo usuário antes de apertar o botão.
- Para interromper o fluxo de execução, pode ser utilizada a função
RAISE_APPLICATION_ERROR (como em qualquer outro objeto) ou o comando
RETURN (mais utilizado nesse caso de botões de ação).
12
Procedures Básico
Usando o RETURN, é indicado que seja utilizado uma mensagem para que seja
apresentada ao usuário em tela antes da interrupção da execução. Essa
mensagem deve ser inserida no parâmetro P_MENSAGEM do objeto antes do
comando RETURN.
Exemplo:
- No final do objeto é indicado que se coloque também uma mensagem de
finalização para que o usuário seja informado que a execução ocorreu de forma
correta.
Nesse caso, não é necessário utilizar o RETURN pois o fim da procedure já irá
ocorrer.
13
Procedures Básico
Histórico de Alterações
Data Versão Descrição Autor
04/10/2021 V02 Procedures Oracle Willy Abreu
Campinas, 04 de Outubro de 2021.
14