Utilizando Stored-Procedures Oracle em um programa Progress

Escrito por Eloi Rene Pscheidt em 19 de dezembro de 2008, 17:04h

Stored-procedures são programas armazenados diretamente no banco de dados que podem ser escritos em linguagem nativa do banco de dados ou não. Em bases de dados Oracle é possível criar esses programas em linguagem PL/SQL e também em Java. A maioria dos bancos de dados atuais suportam stored-procedures.

Algumas vantagens na sua utilização:

  • são executadas diretamente no servidor do banco de dados, fazendo uso dos recursos deste equipamento;
  • são armazenadas em formato compilado, dispensando a necessidade do parse dos comandos a cada execução;
  • a lógica de negócio fica centralizada e poderá ser reutilizada por diversos usuários e aplicações;
  • provê maior segurança encapsulando os objetos que serão acessados.

É possível a partir de um programa escrito em Progress 4GL utilizar stored-procedures armazenadas em bases de dados acessíveis via Dataserver. Isso permite realizar consultas complexas, utilizando a eficiência das linguagens nativas desses bancos de dados e aproveitar o seu resultado em aplicações Progress.

A seguir veremos um exemplo utilizando stored-procedure armazenada em uma base de dados Oracle que retorna as quantidades de pedidos agrupados por mês. Utilizaremos neste exemplo o banco de dados Oracle 10g release 2 com Progress 10.1C. A tabela que armazena essas informações possui a seguinte estrutura:

 _sqlPlus01

Esta tabela faz parte do bando de dados de exemplo disponível com a instalação do Oracle.

A seguir a definição da stored-procedure. Observe que optei por criá-la em uma package, não sendo isso um requisito para o funcionamento do nosso exemplo.

 _sqlPlus02

As packages (pacotes) do Oracle são agrupamentos de stored-procedures que permitem uma melhor organização desses objetos. Por exemplo, posso construir uma package com as stored-procedures da área de vendas e outra package com as stored-procedures da área de recursos humanos.

A seguir o programa desenvolvido em Progress 4GL que utiliza esta stored-procedure:

 _edit1

Observe neste código que a cláusula LOAD-RESULT-INTO <handle_temp_table> permite direcionar o retorno desta stored-procedure para uma tabela temporária do Progress, possibilitando assim manipular este resultado da forma que achar mais adequada. Isso é novo no Progress 10, até a versão 9 não conseguíamos quebrar este resultado em uma tabela automaticamente.

O programa passa uma data de início e fim como parâmetros para a stored-procedure get_orders_by_month, período este desejado para a nossa consulta.

A seguir o resultado apresentado em tela pelo nosso programa Progress:

 _edit2

Em cada linha deste resultado temos o mês da venda, a quantidade de vendas daquele mês, a quantidade de vendas do mês imediatamente anterior e também a quantidade de vendas do mês imediatamente posterior ao mês corrente. Consultando a definição da stored-procedure observe que este resultado foi alcançado de forma muito simples graças ao poder das linguagens de consulta destes bancos, neste caso com operadores LAG e LEAD da linguagem PL/SQL do Oracle.

Embora este exemplo limite-se a uma operação de consulta, stored-procedures podem efetuar também alterações na base de dados, como inserção, alteração e exclusão de registros, podendo serem utilizadas com um programa 4GL semelhante ao exposto aqui.

Mais informações sobre a sintaxe Progress necessária para executar stored-procedures podem ser obtidas nos manuais do Dataserver Oracle e Dataserver SQL Server.

Informações sobre a linguagem PL/SQL do Oracle poder ser obtida no site de documentações da Oracle ou nos diversos sites disponíveis com conteúdo relacionado. 

Categorias: Conectividade | DataServer | Desempenho | Oracle | Programação | Progress | Segurança | SQL Server

Tags:

Comentários (2) -

em 8 de dezembro de 2009, 21:15h

Existe o caminho inverso ? Eu consigo usar uma funcao ou procedure do Progress no Oracle ?

Sidival

em 9 de dezembro de 2009, 08:36h

Bom Dia Sidival!

Stored-procedures em Progress são objetos Java criados no banco de dados utilizando acesso ao engine SQL. Esse acesso pode ser feito via ODBC ou JDBC. Qualquer ferramenta que consiga conectar bancos utilizando estas formas de acesso vão conseguir rodar estas stored-procedures. Há uma documentação explicando como criar estes objetos no Progress e como executá-los no link communities.progress.com/pcom/docs/DOC-16286

Att,
Eloi

eloi

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading


Acesso LogMeIn

Informe o código PIN: