Artigo SQL Magazine 18 - PL/SQL Developer

O PL/SQL Developer é uma IDE (Integrated Development Environment) para desenvolvimento de programas (functions, procedures, triggers, packages) armazenados em um BD Oracle.

Edição 18. Revista SQL Magazine.

Guia do artigo:

O que é O PL/SQL Developer?

O PL/SQL Developer é uma IDE (Integrated Development Environment) para desenvolvimento de programas (functions, procedures, triggers, packages) armazenados em um BD Oracle. Através dele podemos construir todo o módulo executado no servidor de uma aplicação cliente-servidor. Enfim, é uma ferramenta gráfica que auxilia muito nas tarefas de desenvolvimento e também de administração de um BD Oracle.

O objetivo deste artigo não é o de se tornar um tutorial sobre a ferramenta e sim oferecer uma visão geral do que ela proporciona.

O PL/SQL Developer oferece uma interface amigável e extremamente produtiva para as tarefas de edição, compilação, correção, testes, limpeza (debugging), otimização e consulta de programas para sua aplicação cliente-servidor em Oracle, além de outras funcionalidades como execução de scripts SQL, criação e modificação de definições de tabelas (através de linguagem DDL) e relatórios.

A primeira coisa que será solicitada quando iniciado o PL/SQL Developer é a conexão ao BD (Figura 1).

Figura 1. Logon na inicialização do PL/SQL Developer.

Deveremos informar o usuário, senha, qual a instância a se conectar e o modo de conexão, que poderá ser “Normal”, “SYSDBA” ou “SYSOPER”.

O PL/SQL Developer é um aplicativo 32 bit para SO Windows (no mínimo Windows 95 ou NT4) e necessita da versão 32 do SQL*Net, Net 8 ou Net 9. A versão de avaliação (sem nenhuma restrição de funcionalidade mas funcional durante 30 dias) do PL/SQL Developer pode ser baixada gratuitamente no site do fabricante: http://www.allroundautomations.nl.

Administrando o BD Oracle

Criando usuários

Uma das primeiras tarefas de um DBA é a criação de usuários e esquemas. Através da interface do PL/SQL Developer, a tarefa é bastante simplificada; não sendo necessário memorizar todas as definições do comando SQL para efetuar a atividade (Figura 2).

Figura 2. A janela Create User. Facilidade na criação de usuários.

Uma das grandes vantagens do uso da ferramenta é que podemos, por exemplo, criar o usuário atribuindo-lhe os devidos privilégios e também definir cotas nas tablespaces que ele poderá acessar e criar objetos.

Na guia “General”, deve-se definir o nome e senha do usuário. É possível também definir quais são as tablespaces padrão e temporária (caso não seja informado, será utilizada a tablespace SYSTEM).

A guia “Object Privileges” permite a visualização, concessão ou modificação de privilégios a objetos (select, insert, update, delete, execute, alter, etc) ao usuário. As opções são: deixar em branco, para que o usuário não tenha tal privilégio, “Yes”, para que haja o privilégio ou “Grantable”, para que o usuário, além de possuir tal privilégio, possa concedê-lo a outros usuários.

Pode-se ainda conceder privilégios a determinados papéis (Roles) como connect, dba, resource, exp_full_database, etc. definindo também como “Grantable”, se necessário.

Em “System Privileges” é possível conceder privilégios de sistema como create any table, create session, etc. A opção “Grantable” também está presente.

Finalmente, podemos atribuir cotas (Quotas) (em bytes, Kb ou Mb) para o usuário em cada tablespace (isso significa dizer qual o máximo que o usuário poderá alocar em uma tablespace) ou definir esta cota como ilimitada.

Há ainda a opção de visualizar os comandos SQL gerados, clicando no botão View SQL (Figura 3), e gravá-los em um arquivo para posterior utilização.

Figura 3. Visualização das instruções em SQL.

Otimização

Para otimizar expressões SQL, podemos fazer uso do utilitário Explain Plan para visualizar o trajeto de execução da expressão. Podemos ainda visualizar as estatísticas sobre a execução de uma expressão SQL, configurando inclusive quais os dados estatísticos queremos visualizar, incluindo tempo de CPU, leituras físicas e lógicas, escritas físicas entre outros.

Para usar este utilitário, basta pressionar o botão New na barra de ferramentas e selecionar a opção Explain Plan Window. Será aberta uma janela vazia onde apenas é necessário digitar a expressão SQL a ser analisada na metade superior da janela e então pressionar o botão Execute (tecla de atalho F8) para visualizar a estratégia de acesso na metade inferior da janela (Figura 4).

Figura 4. A janela Explain Plan.

Há também a opção de alterar o objetivo do otimizador, selecionando em Optimizer goal entre as opções:

A janela Explain Plan oferece ainda a possibilidade de navegação através da consulta pela ordem de operação, ou seja, é possível analisar cada um dos comandos utilizados pelo otimizador do Oracle para alcançar a informação desejada. Na Figura 4, está em destaque o comando “INDEX UNIQUE SCAN” e na barra de status um comentário da operação que está sendo executada. No caso está sendo selecionado o valor único através de um índice único (PK_CLIENTE, a chave primária), demonstrando uma boa estratégia de acesso adotada pelo otimizador.

Para questões de otimização, temos também o utilitário tkprof que é utilizado para obter informações de uso de recursos sobre todas as execuções de expressões SQL através da habilitação do SQL Trace. Em uma SQL Window ou Test Window em uso, é possível habilitar o SQL Trace através do menu Session -> SQL Trace. Após isso, todo processo executado no servidor vindo do SQL Window ou Test Window serão armazenados em um arquivo de trace no servidor de BD.

A visualização do trace é feita através da utilização do utilitário tkprof no servidor de BD. O utilitário irá gerar um relatório (Listagem 1) contendo informações úteis para análise de performance de expressões SQL ou blocos PL/SQL.

TKPROF: Release 7.2.2.3.1 - Production on Fri Sep 26 14:59:08 1997 Copyright (c) Oracle Corporation 1979, 1994. All rights reserved. Trace file: ora07087.trc Sort options: default ********************************************************************* count = number of times OCI procedure was executed cpu = cpu time in seconds executing elapsed = elapsed time in seconds executing disk = number of physical reads of buffers from disk query = number of buffers gotten for consistent read current = number of buffers gotten in current mode (usually for update) rows = number of rows processed by the fetch or execute call ********************************************************************* begin :deptname := employee.deptname(:empno); end; call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.01 0.01 0 0 0 1 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 0.01 0.01 0 0 0 1 Misses in library cache during parse: 0 Optimizer hint: CHOOSE Parsing user id: 16 ********************************************************************* SELECT DEPT.DNAME FROM DEPT,EMP WHERE EMP.EMPNO = :b1 AND DEPT.DEPTNO = EMP.DEPTNO call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 5 Fetch 1 0.06 0.06 4 4 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 3 0.06 0.06 4 4 0 6 Misses in library cache during parse: 0 Optimizer hint: CHOOSE Parsing user id: 16 (recursive depth: 1) *********************************************************************
Listagem 1. Relatório gerado pelo utilitário tkprof.

O relatório gerado pelo tkprof informa os valores encontrados na análise de uma instrução que foi passada para o banco de dados executar. A coleta de informações é feita para três momentos diferentes da execução da instrução:

Os dados coletados em cada passo da execução (parse, execute e fetch) são referentes a:

Manipulação de objetos não PL/SQL

O PL/SQL Developer permite manipular objetos não PL/SQL com extrema facilidade. Dentre estes objetos, podemos destacar a criação/manipulação de:

Composto por seis páginas, o editor de tabelas permite definir/alterar as informações sobre armazenamento dos dados, cluster, duração e organização (através da guia General). Na guia Columns é possível visualizar, adicionar, excluir, mover ou modificar colunas da tabela. Para manipular as chaves primária, única ou estrangeira da tabela, acesse a guia Keys.

Figura 5. O editor de definições de tabelas.

A página Checks permite manipular as restrições de verificação (check constraints), que são as restrições criadas para garantir regras de negócios. Podemos ainda manipular os índices existentes na tabela. Para isso, acesse a página Indexes. Finalmente, através da página Privileges, é possível manipular a concessão ou negação de privilégios sobre o objeto a outros usuários:

Figura 6. O editor de tarefas.

Desenvolvendo programas com o PL/SQL Developer

Em um BD Oracle, podemos criar cinco diferentes tipos de unidades de programa armazenadas no próprio BD (stored programs): functions (funções), procedures (procedimentos), packages (pacotes), types (tipos) e triggers (gatilhos).

Criando unidades de programa (program units)

Para criar um novo programa, basta selecionar o tipo de unidade que se deseja criar através do menu File -> New -> Program Window (Figura 7) e selecionar o tipo de unidade de programa que se deseja criar.

Figura 7. Acesso ao Program Window.

Nos será apresentado um assistente onde definiremos as opções solicitadas para criação da unidade de programa, tais como: nome da unidade, parâmetros (in, out ou in/out), valores de retorno (no caso das functions), etc. Após definidas as opções iniciais, será exibida a janela Program Window (Figura 8), em que várias partes do código, como o famoso “CREATE OR REPLACE PROCEDURE” já estarão inseridos pelo assistente do PL/SQL Developer.

Figura 8. Exemplo de janela Program Window na manipulação de uma procedure.

Na coluna da direita você encontrará o conteúdo do código. Já na coluna da esquerda da janela são mostrados as variáveis, constantes, tipos, exceções (exceptions), funções locais e procedures utilizadas na unidade de programa que está sendo desenvolvida. Esta funcionalidade se torna muito útil quando se programa um código longo, como um package body, por exemplo.

Existe ainda a opção de salvar o arquivo do código do programa, utilizando extensões padronizadas de acordo com o tipo de unidade de programa. A Tabela 1 mostra as extensões padronizadas para as unidades.

Tipo de unidade de programa extensão
Function .fnc
Procedure .prc
Especificação e corpo de Package .pck
Especificação de Package .spr
Corpo de Package .bdy
Especificação e corpo de tipos (type) .typ
Especificação de tipos (type) .tps
Corpo de tipos (type) .tpb
Trigger .trg
Código Java .jsp
Tabela 1. Extensões padronizadas.

As extensões padronizadas para os arquivos das unidades de programa são apenas uma sugestão fornecida pelo PL/SQL Developer e podem ser alteradas pelo desenvolvedor sem nenhum impacto na programação. Todos os arquivos de unidades de programa salvos através do PL/SQL Developer possuem um formato totalmente compatível com o Oracle SQL*Plus.

Testando e depurando o programa

Após o programa ter sido compilado com sucesso, precisaremos testá-lo. Para isto, basta clicar com botão direito do mouse sobre a unidade de programa, na janela de navegação à esquerda, e selecionar a opção Test. Será apresentada a janela Test Window com os parâmetros contidos no código para efetuar o teste. (Figura 9). Basta informar valores de teste para os parâmetros e iniciar o teste (através da barra de ferramentas do próprio Test Window ou pressionando a tecla F8).

Figura 9. O Test Window em ambiente de depuração.

O PL/SQL Developer possui ainda um depurador integrado ao Test Window que permite rastrear erros nas unidades de programa. Há uma barra de ferramentas no alto da janela com funções relativas à depuração.

Se for encontrado algum erro durante a execução da unidade de programa, será apresentada uma mensagem contendo qual o erro ocorrido e lhe será dado a opção de visualizar o código identificando a linha exata em que o erro ocorreu (Figura 10).

Figura 10. Identificação da linha de código que produziu um erro.

Executando expressões SQL

Freqüentemente, durante o desenvolvimento de programas, é necessário executar algumas expressões SQL para visualizar ou mesmo atualizar dados em tabelas. O PL/SQL Developer oferece uma interface para este tipo de tarefa através do SQL Window. Para acessar o SQL Window, vá em File -> New -> SQL Window. Para executar a expressão SQL informada pressione o botão Execute (tecla de atalho F8) (Figura 11).

Figura 11. SQL Window com o retorno das dez primeiras linhas de um SELECT.

Utilizando variáveis de substituição

Pode-se utilizar variáveis de substituição na expressão SQL para permitir uma entrada de dados do usuário quando a expressão é executada. Para utilizar este recurso, basta acrescentar o nome da variável precedida do caractere “&”. No momento da execução da expressão, será apresentada uma janela de entrada de dados para que seja inserido o valor que será utilizado como substituição na expressão SQL (Figura 12).

Figura 12. Expressão SQL com recurso de variável de substituição.

A janela de comandos

O PL/SQL Developer oferece ainda uma interface de linha de comando extremamente parecida com o SQL*Plus, que possibilita a execução de scripts SQL além das expressões SQL em geral. Para acessar a Command Window, selecione File -> New -> Command Window (Figura 13).

Figura 13. O Command Window, interface similar ao SQL*Plus.

Relatórios

Existe a opção de geração de relatórios sobre os dados da aplicação que estiver sendo desenvolvida ou até mesmo sobre as informações do dicionário de dados. Esta segunda, bastante útil para os DBAs. Estão disponíveis vários relatórios padronizados de acordo com a característica das informações que se pretende obter.

Para ter acesso aos relatórios, vá em Reports e escolha a seção de relatório necessária. São quatro as opções de informações para os relatórios: DBA, Objects, PL SQL e User.

Os relatórios ainda oferecem a opção de visualização da expressão SQL que dá origem aos resultados obtidos pelo relatório, e se o acesso à expressão foi liberada (em alguns casos, o acesso está travado), é possível ainda editá-la, alterando conforme necessidade. Por fim, temos que a exibição é feita em formato HTML e existe a possibilidade de gravação do arquivo HTML e até mesmo exportação do relatório para formatos CVS, TSV ou XML e Excel.

Projetos

Para uma melhor organização dos trabalhos, o PL/SQL Developer permite a organização dos arquivos manipulados através de projetos. Um projeto nada mais é do que uma coleção de códigos fonte, objetos de BD, notas e opções. Desta forma, pode-se trabalhar apenas com um escopo de itens específicos ao invés de trabalhar com um BD ou esquema completos.

O único cuidado que devemos ter é o de garantir que a opção Use Projects esteja selecionada nas preferências do PL/SQL Developer. Vá em Tools -> Preferences -> Options e selecione a opção Use Projects caso ainda não esteja selecionada.

Através do menu Project -> New, preencha as opções de criação do novo projeto (Figura 14).

Figura 14. Criação de um novo projeto.

Salve o projeto (por padrão, a extensão será .prj) e a partir deste instante, todas as vezes em que este projeto for aberto, as definições, objetos, códigos, etc. a ele associados, estarão disponíveis organizadamente.

Agora é o momento de adicionar as unidades de programa, objetos, etc. ao seu projeto. Para adicionar uma unidade de programa previamente salva, basta abri-la e selecionar Project -> Add to Project para que esta unidade de programa seja incluída na lista de itens do projeto. Uma outra maneira de adicionar unidades de programa ou objetos é através do navegador à esquerda da área de trabalho do PL/SQL Developer. Neste navegador estarão disponíveis apenas as unidades de programa ou objetos que já tenham sido criadas no BD. Abra a janela Project Items (Project -> Project Items...) e depois selecione a unidade de programa ou objeto no navegador e, pressionando o botão direito do mouse, selecione a opção Add to project (Figura 15).

Figura 15. Itens adicionados ao projeto.

Finalmente, basta compilar o projeto. Para isso, selecione a opção Build ou Make no menu Project. A função Build irá simplesmente compilar todos os componentes do projeto que estiverem habilitados para compilação. Os itens serão compilados na ordem em que aparecem na lista de itens do projeto (Figura 15). A função Make somente compilará os objetos que sofreram alguma alteração desde a última compilação.

Conclusões

Desenvolver aplicações ou executar administração em um BD Oracle não é uma tarefa simples, requer um alto grau de conhecimento do BD e também da linguagem procedural PL/SQL além, é claro, da estrutura de expressões SQL. Considerando estas tarefas, ferramentas gráficas que podem nos trazer facilidades e agilidade no processo de desenvolvimento e administração do BD são muito bem vindas.

O PL/SQL Developer é uma destas ferramentas que nos permite um alto grau de produtividade e confiabilidade nas informações e resultados.

Por fim, um conselho que me permito dar é o de não se “viciar” nas ferramentas gráficas e sim usá-las apenas como um apoio às tarefas. Não se esqueça nunca das expressões SQL para chegar nesta ou naquela informação, pois não é nem um pouco improvável que em uma consultoria você possa ter acesso apenas a um terminal de fósforo verde piscando em sua frente ou mesmo, sem chegar a extremos, um BD instalado sobre um sistema operacional Linux, por exemplo, sem interface gráfica instalada para poupar recursos de memória. Lembre-se, sempre teremos o velho e bom SQL*Plus em qualquer ambiente.

Artigos relacionados