Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Compatibilidade com SQL no CLPPlus

Um guia para uma ferramenta unificada de linha de comando para usuários migrados e existentes do DB2

Mangesh Shanbhag, Staff Software Engineer, Common Application Development, IBM
Mangesh Shanbhag photo
Mangesh é Staff Software Engineer e trabalha na IBM India pelos últimos três anos e meio. Desde então, ele está associado com o desenvolvimento de ferramentas de Information Management no India Software Lab. Ele tem cerca de cinco anos de experiência em desenvolvimento de produto de software. Atualmente, ele trabalha com a equipe Common Application Development, em que desenvolve recursos de relatórios, script e compatibilidade com o SQL do CLPPlus. Ele é formado em ciência da computação pela VTU Karnataka (Índia). Em seu tempo livre, ele gosta de ler livros e assistir filmes. Ele também é um ávido fã de esportes.

Resumo:  O CLPPlus fornece funcionalidade essencial para usuários migrando scripts do PL/SQL para o IBM® DB2®, bem como muitos recursos novos que permitem que usuários do DB2 e do Informix® criem relatórios formatados e realizem tarefas comuns rápida e eficientemente. Nesse artigo, veja uma introdução ao CLPPlus e explore o suporte a dialetos do PL/SQL. Saiba também como é fácil formatar relatórios e configurar scripts para tarefas comuns. Finalmente, o artigo explica como usar AUTOTRACE com o CLPPlus para obter informações para ajuste de desempenho usando o utilitário SQL Buffer para desenvolver blocos SQL grandes e usando envio para o spool para ajudar no desenvolvimento de scripts.

Data:  22/Set/2011
Nível:  Intermediário
Atividade:  833 visualizações
Comentários:  


Visão geral

A ferramenta plus do processador de linha de comando, CLPPlus, fornece recursos essenciais para migrar para o DB2 a partir do Oracle e também para usuários do DB2 e do Informix. Usando o CLPPlus, os usuários migrando para o DB2 podem executar scripts SQL existentes com relação ao DB2 para Linux®, UNIX® e Windows® com pouca ou nenhuma modificação. Usuários existentes do DB2 também podem tirar vantagem de alguns dos novos recursos e benefícios do CLPPlus que permitem aos DBAs executar muitas tarefas comuns rápida e eficientemente. O CLPPlus é uma ferramenta simples e útil para que os usuários criem relatórios formatados ou gerenciem scripts PL/SQL ou SQL de uma maneira familiar. Além disso, suas facilidades sofisticadas do editor de comandos o tornam uma ferramenta fácil de usar para desenvolver e depurar blocos PL/SQL.

Como parte dos aprimoramentos de compatibilidade com SQL no IBM DB2 9.7 para Linux, UNIX e Windows, uma série de recursos de compatibilidade permite que os usuários executem aplicativos Oracle no ambiente DB2. Parte desta entrega foi um utilitário interativo de linha de comandos, o CLPPlus. O CLPPlus é uma ferramenta de linha de comando unificada para todos os servidores de dados IBM, incluindo o DB2 para Linux, UNIX e Windows, DB2 para z/OS® e Informix. Juntamente com seu suporte para comandos SQL e do servidor nativo, o CLPPlus evoluiu ao longo do tempo, preenchendo a lacuna de compatibilidade com SQL que os clientes em migração encontravam e relatavam para nos ajudar a amadurecer o CLPPlus. Agora, o CLPPlus é capaz de tratar os scripts de SQL em migração com suporte abrangente a recursos de compatibilidade do SQL, incluindo:

  • Dialeto PL/SQL
  • Formatação de relatório
  • Script
  • AUTOTRACE
  • Utilitário SQL Buffer
  • Envio para spool

As seções a seguir fornecem uma visão geral de cada um desses recursos com exemplos.


Iniciando o CLPPlus

O CLPPlus oferece várias opções que podem ser especificadas ao chamá-lo a partir da linha de comando. Isso inclui ativar o modo silencioso, conectar usando um arquivo de configuração e executar scripts SQL. Essas opções fornecem a flexibilidade de chamar o CLPPlus para atender às suas necessidades.

Scripts SQL podem ser executados durante a inicialização do CLPPlus usando o comando @, que é útil para executar trabalhos de rotina em lote quando o CLPPlus é iniciado.

Iniciar o CLPPlus com -s[ilent] suprime certas mensagens, como informações de versão, informações sobre copyright, mensagens de prompt e informações de conexão, de serem exibidas no console. Essas opções podem ser usadas em combinações. Chame o CLPPlus em modo silencioso executando o arquivo demo.sql usando @: clpplus -silent @C:\demo.sql.

Uma cadeia de caractere de conexões pode ser especificada durante a chamada do CLPPlus para estabelecer a conexão com o banco de dados na sessão do CLPPlus, como mostrado no exemplo abaixo. O CLPPlus pode até mesmo ser especificado para detectar as informações de conexão a partir do arquivo de configuração fornecendo o nome dsn_alias durante a chamada. O exemplo abaixo mostra como chamar o CLPPlus com uma cadeia de caractere de conexão de banco de dados.


Lista 1. Chamada do CLPPlus com informações de conexão

C:\>clpplus -nw manshanb/temp4now@localhost:500000.testdb

CLPPlus: Version 1.4
Copyright >c< 2009, IBM CORPORATION. All rights reserved.

Database Connection Information:
Hostname = localhost
Database server = DB2/NT SQL09074
SQL authorizaiton ID = manshanb
Local database alias = TESTDB
Port = 50000

SQL>

Iniciar o CLPPlus em modo detalhado (-verbose) possibilita a impressão de mensagens adicionais na sessão do CLPPlus, que são suprimidas no modo normal. Isso fornecerá informações adicionais ao usuário, o que é especialmente útil no caso de falha de qualquer execução de comando no CLPPlus.

O redirecionamento de entrada e saída é suportado no CLPPlus, em que um usuário pode redirecionar um arquivo para a sessão do CLPPlus para fornecer valores de entrada, o que é útil ao executar scripts SQL sem intervenção manual quando o script exige que valores de entrada sejam fornecidos durante o tempo de execução. Os usuários podem até mesmo redirecionar a saída do CLPPlus para um arquivo usando o redirecionamento de saída no CLPPlus. O exemplo abaixo mostra o uso do redirecionamento no CLPPlus. O arquivo input.txt é passado para a sessão do CLPPlus, que contém o valor de entrada exigido pelo script demo.sql.


Lista 2. Redirecionamento de entrada no CLPPlus

C:\>clpplus @c:\demo.sql <c:\input.txt  

CLPPlus: Version 1.4
Copyright >c< 2009, IBM CORPORATION. All rights reserved.

Database Connection Information:
Hostname = localhost
Database server = DB2/NT SQL09074
SQL authorization ID = manshanb
Local database alias = SAMPLE
Port = 50000

Enter a value for variable 1:
Original statement: select * from employee where firstnme='&1'
New statement with substitutions: select * from employee where firstnme='MICHAEL'

FIRSTNME                                        SALARY
-------------------------- ---------------------------
MICHAEL                                        10000.0
C:\>

Dados de amostra

Os dados do exemplo mostrados nesse artigo são parte do banco de dados SAMPLE do DB2, que acompanha o produto.

O CLPPlus também fornece uma facilidade para executar scripts de usuário automaticamente em cada login do CLPPlus. Isso pode ser obtido de duas formas: configurando o nome do arquivo do script com caminho como valor para a variável de ambiente CLPPLUS_USER_STARTUP_SCRIPT ou tendo um arquivo de script com o nome .clpplusrc no diretório inicial do sistema operacional. Isto é útil ao executar um conjunto de comandos na inicialização em cada chamada do CLPPlus.


Suporte para dialetos do PL/SQL

O CLPPlus suporta a execução de todos os tipos de instruções PL/SQL suportados pelo servidor DB2 for LUW. Instruções como create e drop package, procedure, function, trigger etc. podem ser executadas, sem erros, no CLPPlus. Instruções de bloco do PL/SQL, como DECLARE, BEGIN, END podem ser executadas no CLPPlus como blocos anônimos. O exemplo a seguir mostra a execução de um bloco PL/SQL simples no CLPPlus.


Lista 3. Execução de bloco do PL/SQL

SQL> set serveroutput on
SQL> begin
  2  dbms_output.put_line('plsql demo');
  3  end;
  4  /

plsql demo

DB250000I: The command completed successfully.

Blocos anônimos também podem ser executados usando o comando execute no CLPPlus. O comando execute é usado principalmente para a execução de instruções PL/SQL de uma linha, como mostra o exemplo abaixo. Esse comando facilita a execução de instruções PL/SQL de uma linha evitando a necessidade de colocá-los dentro de um bloco BEGIN-END. No exemplo abaixo, a variável var1 recebe a atribuição de um comando varchar usando exec.


Lista 4. Execução de PL/SQL de uma linha
  
SQL> variable var1 varchar
DB250000I: The command completed successfully.

SQL> exec :var1:='manshanb';
DB250000I: The command completed successfully.

Procedimentos PL/SQL podem ser executados no CLPPlus usando o comando CALL. O comando exec também pode ser usado para executar procedimentos, como mostra o exemplo abaixo.


Lista 5. Execução de PL/SQL usando os comandos call e exec
  
SQL> call dbms_output.put_line('plsql demo');
plsql demo
DB250000I: The command completed successfully.

SQL> exec dbms_output.put_line('plsql demo');
plsql demo
DB250000I: The command completed successfully.

O CLPPlus suporta a impressão do conteúdo do buffer de mensagem DBMS_OUTPUT para o console do CLPPlus usando a facilidade de saída do servidor. Um usuário pode ativar essa facilidade usando o comando set, como mostrado no exemplo abaixo. Isso pode ser útil ao depurar blocos ou procedimentos do PL/SQL buscando mensagens de saída do servidor inseridas em blocos PL/SQL usando a instrução DBMS_OUTPUT.PUT_LINE().


Lista 6. Saída do servidor dentro do bloco PL/SQL

SQL> set serveroutput on
SQL> Begin
   2	For i In 1..10 Loop
   3		Dbms_Output.Put_Line('Count '||i);
   4 	End Loop;
   5 End;
   6 /

Count 1
Count 2
Count 3
Count 4
Count 5
Count 6
Count 7
Count 8
Count 9
Count 10

DB250000I: The command completed successfully.


Formatação de relatório

O CLPPlus suporta uma série de recursos de formatação de relatórios, como o comando de coluna, comando de definição, título da página, título do relatório, quebra e cálculo, que fornecem a facilidades avançadas de geração e formatação de relatórios para o usuário. Os usuários podem usar essas opções para personalizar o relatório conforme as necessidades do negócio. Nesta seção, exploraremos recursos importantes suportados pelo CLPPlus.

Comando column

column fornece várias opções que podem ser usadas para configurar uma coluna específica no relatório. column é definido em um nome de coluna que pode ser configurado. As opções ON e OFF podem ser usadas para controlar a ativação do comando column. ? column fornece detalhes sobre todas as opções suportadas pelo comando column.

A opção format é usada para formatar os valores de coluna dos tipos numeric e varchar. Para formatar a largura de uma sequência de caracteres, use um número inteiro após o A. Valores de cadeias de caractere que excedem a largura especificada são quebrados ou truncados, com base na opção TRUNCATED ou WRAPPED especificada no comando column. Valores numéricos podem ser formatados com uma sequência de caractere de formato, como mostrado no exemplo. A opção justify pode ser usada para alinhar os valores da coluna à direita, no centro ou à esquerda. O exemplo abaixo mostra o uso dessas opções de coluna com a tabela de funcionários.


Lista 7. Opções de formatação de coluna

  
SQL>column salary format 99999.99
SQL>column lastname format A6
SQL>firstnme, lastname, salary from employee ;

FIRSTNME     LASTNA      SALARY
------------ ------ -----------
CHRISTINE    HAAS      ########
MICHAEL      THOMPS    94250.00
             ON

SALLY        KWAN      98250.00
JOHN         GEYER     80175.00
IRVING       STERN     72250.00
EVA          PULASK    96170.00
             I

EILEEN       HENDER    89750.00
             SON

THEODORE     SPENSE    86150.00
             R

VINCENZO     LUCCHE    66500.00
             SSI

SEAN         O'CONN    49250.00
             ELL

Algumas das outras opções de coluna úteis ao formatar relatórios são dadas abaixo. O cabeçalho de uma coluna pode ser alterado com a opção HEADING especificando o texto do cabeçalho. A opção PRINT | NOPRINT pode ser usada para controlar a impressão de uma coluna específica. Valores NULL em uma coluna podem ser substituídos por texto definido pelo usuário usando a opção NULL TEXT. FOLD_BEFORE e FOLD_AFTER podem ser usados para fornecer uma nova linha, antes ou depois de imprimir os valores da coluna.

O exemplo a seguir demonstra o uso da opção HEADING ao alterar o cabeçalho de uma coluna na exibição do resultado da tabela. No exemplo, a opção FORMAT é usada para formar varchar e colunas decimais, ENAME e SAL respectivamente.


Lista 8. Opções de formatação de coluna

SQL> COLUMN ENAME HEADING EMP_NAME FORMAT A7 WRAP
SQL> COLUMN SAL FORMAT $9999.99
SQL> select ename, deptno, sal from emptable;

EMP_NAM      DEPTNO         SAL
------- ----------- -----------
SMITH            20     $800.00
ALLEN            30    $1600.00
WARD             30    $1250.00
JONES            20    $2975.00
MARTIN           30    $1250.00
BLAKE            30    ########
CLARK            10    $2450.00
SCOTT            20    $3000.00
KING             10    $5000.00
MANGESH          30    $1500.00
SHA                            

As variáveis OLD_VALUE e NEW_VALUE são usadas para reter os valores antigo e novo de uma coluna em qualquer momento durante a geração do relatório. Esses valores são usados principalmente com títulos de página. A opção LIKE permite copiar o formato e os atributos de exibição entre duas colunas.

Títulos de página e relatório

O CLPPlus suporta a impressão de títulos de página e relatório, que são úteis na geração de relatórios. ttitle e BTITLE são usados para ativar os títulos superior e inferior da página, respectivamente. Da mesma forma, REPHEADER e REPFOOTER são usados para ativar a impressão de texto de cabeçalho e rodapé em relatórios. Os textos de título podem ser alinhados à esquerda, à direita e no centro da página, com base na necessidade do cliente. Títulos de página também podem ser configurados para exibir números de páginas nos relatórios usando a opção PGNO. Os valores de variável de coluna new_value e old_value podem ser exibidos como parte do texto TTITLE e btitle, respectivamente. O valor SKIP n é usado para pular o número de linhas n depois da exibição do título. O exemplo abaixo mostra o uso de títulos de página.


Lista 9. Títulos de página

SQL> ttitle right 'Employee Data'
SQL> btitle center 'IBM Corporation'
SQL> select empno, firstnme, lastname, edlevel, salary, bonus from emp ;
SQL> set linesize 70

                                                        Employee Data

EMPNO  FIRSTNME     LASTNAME        EDLEVEL      SALARY       BONUS
------ ------------ --------------- ------- ----------- -----------
000010 CHRISTINE    HAAS                 18   152750.00     1000.00
000020 MICHAEL      THOMPSON             18    94250.00      800.00
000030 SALLY        KWAN                 20    98250.00      800.00
000050 JOHN         GEYER                16    80175.00      800.00
000060 IRVING       STERN                16    72250.00      500.00
000070 EVA          PULASKI              16    96170.00      700.00
000090 EILEEN       HENDERSON            16    89750.00      600.00
000100 THEODORE     SPENSER              14    86150.00      500.00
000110 VINCENZO     LUCCHESSI            19    66500.00      900.00
000120 SEAN         O'CONNELL            14    49250.00      600.00
000130 DELORES      QUINTANA             16    73800.00      500.00

                            IBM Corporation

                                                        Employee Data

EMPNO  FIRSTNME     LASTNAME        EDLEVEL      SALARY       BONUS
------ ------------ --------------- ------- ----------- -----------
000210 WILLIAM      JONES                17    68270.00      400.00
000220 JENNIFER     LUTZ                 18    49840.00      600.00
000230 JAMES        JEFFERSON            14    42180.00      400.00
000240 SALVATORE    MARINO               17    48760.00      600.00
000250 DANIEL       SMITH                15    49180.00      400.00
000260 SYBIL        JOHNSON              16    47250.00      300.00
000270 MARIA        PEREZ                15    37380.00      500.00
000280 ETHEL        SCHNEIDER            17    36250.00      500.00
000290 JOHN         PARKER               12    35340.00      300.00
000300 PHILIP       SMITH                14    37750.00      400.00
000310 MAUDE        SETRIGHT             12    35900.00      300.00

                            IBM Corporation	

BREAK e COMPUTE

Os dois comandos importantes usados para a geração de relatórios são BREAK e COMPUTE. Esses comandos são usados em conjunto durante a geração de relatórios para formatar o relatório com base nos valores de colunas. Seu uso permite que os relatórios sejam detalhados em vários conjuntos de registros relacionados, tornando o relatório mais legível e organizado.

O comando BREAK pode ser usado para detalhar o relatório em um conjunto de registros com base em um valor de coluna específica. COMPUTE pode ser usado para realizar alguns cálculos naquele conjunto de registros. O exemplo a seguir mostra o uso desses comandos no CLPPlus.


Lista 10. Comandos BREAK e COMPUTE

SQL> BREAK ON EDLEVEL SKIP 2

SQL> COMPUTE MAX LABEL MAX_SAL of SALARY on EDLEVEL

SQL> SELECT EDLEVEL, EMPNO, FIRSTNME, SALARY FROM EMPLOYEE ORDER BY EDLEVEL;

EDLEVEL EMPNO  FIRSTNME          SALARY
------- ------ ------------ -----------
     12 000290 JOHN            35340.00
     12 000310 MAUDE           35900.00
     12 200310 MICHELLE        35900.00
*******                     -----------
MAX_SAL                        35900.00



     14 000100 THEODORE        86150.00
     14 000120 SEAN            49250.00
     14 000230 JAMES           42180.00
     14 200120 GREG            39250.00
     14 200330 HELENA          35370.00
*******                     -----------
MAX_SAL                        86150.00
...
...

Para obter mais informações sobre os recursos de formatação de relatórios do CLPPlus, consulte o artigo "Geração de relatórios formatados para servidores de dados IBM usando o CLPPlus."


Suporte a script

Recursos como variáveis de ligação, variáveis de substituição, WHENEVER SQLERROR, WHENEVER OSERROR etc. juntos constituem o suporte a script no CLPPlus. Podemos usar esses recursos ao desenvolver scripts SQL e, portanto, usar, sem erros, variáveis entre cliente e servidores para controlar o fluxo da execução do script com base na ação especificada para as ocorrências de erros de SQL e do SO. Variáveis de ambiente também podem ser acessadas dentro de scripts do CLPPlus da mesma forma entre sistemas operacionais. Nesta seção, veremos alguns destes recursos suportados pelo CLPPlus.

Variáveis de ligação

O suporte a variáveis de ligação é um recurso único no CLPPlus. Uma variável é declarada no cliente do CLPPlus e pode ser usada como variável de servidor em blocos SQL e PL/SQL. O comandoexec pode ser usado para inicializar a variável com um valor. Ela também pode ser inicializada envolvendo-a em um bloco Begin-End . O CLPPlus suporta variáveis de vários tipos de dados, incluindo inteiro, decimal, varchar, varchar2, número, boleano, linha, array de linhas, cursor etc. Sua capacidade de ser usada, sem erros, entre cliente e servidor significa que você pode usar a mesma variável em várias execuções. O comando PRINT pode ser usado para exibir o valor da variável no CLPPlus.


Lista 11. Variáveis de ligação
  
SQL> variable var1 varchar2
DB250000I: The command completed successfully.

SQL> variable var2 number
DB250000I: The command completed successfully.

SQL> exec :var1:='manshanb' ;
DB250000I: The command completed successfully.

SQL> begin
  2  :var2:=15500.50;
  3  end;
  4  /

DB250000I: The command completed successfully.

SQL> print var1
'manshanb'

SQL> print var2
15500.50

SQL> select firstnme from employee where salary=:var2 ;

FIRSTNME            
---------------
Michael     

Variáveis são eficientes em chamadas de procedimento, em que é possível capturar os valores dos parâmetros OUT em uma variável e passar a variável como um valor de parâmetro INPUT para uma chamada de procedimento, como mostrado no exemplo abaixo. Os parâmetros INOUT nas chamadas de procedimento podem ser manipulados usando uma única variável que se comportará como IN e OUT.


Lista 12. Variáveis de ligação em chamadas de procedimento
  
SQL> CREATE OR REPLACE PROCEDURE TESTPROC ( IN P1 INTEGER, INOUT P2 INTEGER, 
   - OUT P3 VARCHAR2(20))
   2 BEGIN
   3 	SET P2 = P1+P2 ;
   4	SET P3 = 'Result is ' || P2;	
   5 END ;
   6 /

DB250000I: The command completed successfully.

SQL>  var p1 integer
DB250000I: The command completed successfully.

SQL>  var p2 integer
DB250000I: The command completed successfully.

SQL>  var p3 varchar2
DB250000I: The command completed successfully.

SQL> exec :p1:=100;
DB250000I: The command completed successfully.

SQL> exec :p2:=50;
DB250000I: The command completed successfully.

SQL> call testproc(:p1, :p2, :p3);
DB250000I: The command completed successfully.

SQL> print p1
100

SQL> print p2
150

SQL> print p3
'Result is 150' 

Variáveis de substituição

Diferentemente de variáveis de ligação, uma variável de substituição é processada no lado do cliente e seu valor será substituído antes de enviar o comando para execução. Ela pode ser usada como marcador para armazenar os valores de cadeia de caractere, que podem ser usados posteriormente até que a sessão esteja em execução. Variáveis de substituição podem ser definidas usando o comando define e são acessadas usando o caractere e comercial (&) seguido do nome da variável. O exemplo abaixo mostra o uso das variáveis de substituição no CLPPlus.


Lista 13. Demonstração de variável de substituição

  
SQL> define name='MICHAEL'

SQL> select firstnme, salary from employee where firstnme='&name';

Original statement:select firstnme, salary from employee where firstnme='&name'
New statement with substitutions:select firstnme, salary from employee where 
firstnme='MICHAEL'

FIRSTNME              SALARY
--------------- ------------
MICHAEL                10000
  

Se uma variável acessada não for definida, o CLPPlus solicita o valor daquela variável, como mostrado abaixo.


Lista 14. Demonstração de variável de substituição

SQL> select firstnme, salary from employee where salary > &sal;
Enter a value for variable sal: 15000

Original statement:select firstnme, salary from employee where salary > &sal
New statement with substitutions:select firstnme, salary from employee where 
salary > 15000

FIRSTNME                              SALARY
-------------------- -----------------------
MANSHANB                               15500
JOE                                    25000


Os usuários também podem aceitar um valor para uma variável durante o tempo de execução usando o comando ACCEPT como mostrado no exemplo abaixo. Isso é útil ao solicitar um valor para uma variável que precisa de entrada do usuário durante a execução dinâmica do script.


Lista 15. ACCEPT

SQL> accept USER_ID
Enter a value for variable USER_ID: manshanb

SQL> define
DEFINE USER_ID = manshanb

O CLPPlus também suporta a passagem de variáveis de ambiente ou de shell como argumentos para os scripts durante a chamada do CLPPlus, que, a seguir, são convertidas em variáveis de substituição nomeadas de acordo com suas posições, que podem ser acessadas usando o caractere e comercial (&) seguido de sua posição. Da mesma forma, mesmo valores podem ser passados como argumentos para os scripts. O exemplo abaixo demonstra esse recurso.


Lista 16. Variáveis shell como variáveis de substituição
 
C:\>Set DEPT=E32 

C:\>clpplus -s @c:\demo.sql %DEPT% 10000

Original statement:select firstnme, salary from employee where edlevel='&1' and 
salary > &2
New statement with substitutions:select firstnme, salary from employee where edlevel='E32'
and salary > 10000

FIRSTNME                 SALARY
--------------- ---------------
MICHAEL                   15500
JOE                       11100
manshanb                  20000 

demo.sql contém a seguinte instrução SQL:

select firstnme, salary from employee where edlevel='&1' and salary > &2 ;

A variável de ambiente DEPT e o valor 10000 foram passados como argumentos para o script demo.sql, que consome esses argumentos na forma de variáveis de substituição.

Manipulação de erros

Erros ocorridos durante a execução de scripts no CLPPlus podem ser capturados e uma ação específica pode ser realizada usando os comandos suportados WHENEVER SQLERROR e WHENEVER OSERROR . Usando esses comandos, podemos controlar o comportamento do CLPPlus especificando as ações a serem realizadas, como EXIT ou CONTINUE sempre que ocorrer um erro. Também podemos escolher confirmar ou reverter as transações não confirmadas durante erros de SQL ou de SO usando a opção COMMIT ou ROLLBACK. No caso de EXIT, podemos retornar o código de retorno dependente do sistema operacional com base no cenário de erro.

O exemplo a seguir mostra o comportamento do comando WHENEVER SQLERROR CONTINUE. Aqui, ao ocorrer um erro, o prompt do CLPPlus é retornado e continua a aguardar por entrada do usuário.


Lista 17. WHENEVER SQLERROR

 SQL> whenever sqlerror continue

SQL> select * from nonexistingtable;
SQL0204N "SCHEMA.NONEXISTINGTABLE" is an undefined name.

SQL>

Também podemos confirmar, reverter ou não tomar nenhuma ação sempre que um erro de SQL ocorrer.


Lista 18. Tipos de ação de WHENEVER SQLERROR
 
SQL> whenever sqlerror continue commit 

SQL> whenever sqlerror continue rollback

SQL> whenever sqlerror continue none

O exemplo a seguir demonstra o uso da opção EXIT durante um erro de SQL para sair do aplicativo CLPPlus.


Lista 19. Ação de saída do WHENEVER SQLERROR
 
SQL> whenever sqlerror exit

SQL> select * from nonexistingtable;
SQL0204N "SCHEMA.NONEXISTINGTABLE" is an undefined name.

C:\> 

O exemplo a seguir especifica o código de erro retornado durante EXIT. Esse comportamento é idêntico ao comando EXIT do CLPPlus.


Lista 20. Código EXIT durante WHENEVER SQLERROR

SQL> whenever sqlerror exit failure

SQL> select * from nonexistingtable;
SQL0204N "SCHEMA.NONEXISTINGTABLE" is an undefined name.

C:\echo %errorlevel%
1 

Os usuários também podem especificar o valor de uma variável de substituição a ser retornado durante a saída. O exemplo a seguir demonstra esse comportamento.


Lista 21. Valor da variável de substituição retornado durante WHENEVER SQLERROR
 
SQL> define exit_value=6

SQL> whenever sqlerror exit exit_value

SQL> select * from nonexistingtable;
SQL0204N "SCHEMA.NONEXISTINGTABLE" is an undefined name.

C:\echo %errorlevel%
6  

Conforme suportado pelo comando EXIT do CLPPlus, podemos especificar confirmar ou reverter as transações sempre que ocorrer um erro. Os comandos a seguir demonstram as ações de confirmação e retrocesso com WHENEVER SQLERROR:

whenever sqlerror exit 2 commit 
whenever sqlerror continue rollback

O exemplo a seguir mostra o comportamento do CLPPlus durante um erro de SO com o código de erro de saída.


Lista 22. WHENEVER OS ERROR
  
SQL> whenever oserror exit -1

SQL> get c:\nonexistingfile.sql
DB250204E: An attempt to locate a file 'c:\\nonexistingfile.sql' failed. The command 
cannot be processed.

c:\>echo %errorlevel%
-1  

O exemplo a seguir mostra o comportamento do comando quando CONTINUE é especificado com a opção COMMIT.


Lista 23. WHENEVER OS ERROR com CONTINUE COMMIT
   
SQL> whenever oserror continue commit

SQL> get c:\nonexistingfile.sql
DB250204E: An attempt to locate a file 'c:\\nonexistingfile.sql' failed. The command 
cannot be processed.

SQL> 


AUTOTRACE

AUTOTRACE fornece informações sobre o plano de acesso que o otimizador seleciona durante a execução de uma instrução, juntamente com alguns valores estatísticos principais para aquela execução específica registrada pelo servidor. A saída do AUTOTRACE pode ser usada para otimizar as consultas SQL com base na análise dos dados, que é útil no ajuste de desempenho de consultas SQL ou ao diagnosticar a variação nos desempenhos do aplicativo.

SET AUTOT[RACE] { OFF | ON | TRACE[ONLY] } [EXP[LAIN]] [STAT[ISTICS]]

Configurar a opção AUTOTRACE como ON possibilitará a exibição de informações de explicação e estatística de cada instrução executada naquela sessão, juntamente os resultados na consulta, até que AUTOTRACE seja desativado. As opções EXPLAIN e STATISTICS possibilitam a exibição do plano de explicação e informações de estatística, respectivamente. Informações de estatística incluem estatísticas de rede, custo, informações de bloqueio, classificações, conjunto de E/S, linhas lidas, linhas modificadas e linhas retornadas etc., para nomear alguns. A opção TRACEONLY desativa a exibição dos resultados da execução da consulta.

O exemplo dado abaixo mostra a saída para AUTOTRACE quando definido para ON.


Lista 24. AUTOTRACE
    
SQL> SET AUTOTRACE ON

SQL> SELECT EMPNO, FIRSTNME, LASTNAME, WORKDEPT, PHONENO FROM EMPLOYEE 
     WHERE SALARY=152750 ;

EMPNO  FIRSTNME     LASTNAME        WORKDEPT PHONENO
------ ------------ --------------- -------- -------
000010 CHRISTINE    HAAS            A00      3978   



EXPLAIN PLAN
-------------------------

    ID TYPE            OBJECT_SCHEMA        OBJECT_NAME         
------ --------------- -------------------- --------------------
PREDICATE_TEXT                                    
--------------------------------------------------
     1 RETURN                                                   
                                                  

     2 TBSCAN          MANSHANB             EMPLOYEE            
(Q1.SALARY = +0152750.00)                         




STATISTICS
---------------------------------
COMPILATION_TIME      =  195000
ISOLATION_LEVEL       =  CS
ROWS_READ             =  42
ROWS_RETURNED         =  1
ROWS_MODIFIED         =  0
TOTAL_SORTS           =  0
IN_MEMORY_SORTS       =  0
LOCK_WAITS            =  0
LOCK_ESCALS           =  0
LOCK_TIMEOUTS         =  0
POOL_READS            =  1
POOL_WRITES           =  0
QUERYOPT              =  5
ESTIMATED_COST        =  8
TOTAL_COST            =  7.6209
NETWORK_TRIPS         =  2
BYTES_SENT            =  505
BYTES_RECEIVED        =  1215
 

O exemplo abaixo mostra o uso do AUTOTRACE com o plano EXPLAIN ativado, juntamente com os resultados da consulta. Isso desativa a exibição de informações de estatísticas.


Lista 25. AUTOTRACE com EXPLAIN ativado
     
SQL> SET AUTOTRACE ON EXPLAIN

SQL> SELECT EMPNO, FIRSTNME, LASTNAME FROM EMPLOYEE WHERE SALARY=152750 ;

EMPNO  FIRSTNME     LASTNAME       
------ ------------ ---------------
000010 CHRISTINE    HAAS           


EXPLAIN PLAN
-------------------------

    ID TYPE            OBJECT_SCHEMA        OBJECT_NAME         
------ --------------- -------------------- --------------------
PREDICATE_TEXT                                    
--------------------------------------------------
     1 RETURN                                                   
                                                  

     2 TBSCAN          MANSHANB             EMPLOYEE            
(Q1.SALARY = +0152750.00)

O exemplo abaixo demonstra o uso da opção AUTOTRACE com TRACEONLY. O resultado da consulta exibido é desativado com essa configuração.


Lista 26. AUTOTRACE com modo TRACEONLY

SQL> SET AUTOTRACE TRACEONLY

SQL> SELECT * FROM EMPLOYEE WHERE SALARY=152750 ;


EXPLAIN PLAN
-------------------------

    ID TYPE            OBJECT_SCHEMA        OBJECT_NAME         
------ --------------- -------------------- --------------------
PREDICATE_TEXT                                    
--------------------------------------------------
     1 RETURN                                                   
                                                  

     2 TBSCAN          MANSHANB             EMPLOYEE            
(Q1.SALARY = +0152750.00)                         

STATISTICS
---------------------------------
COMPILATION_TIME      =  4000
ISOLATION_LEVEL       =  CS
ROWS_READ             =  42
ROWS_RETURNED         =  1
ROWS_MODIFIED         =  0
TOTAL_SORTS           =  0
IN_MEMORY_SORTS       =  0
LOCK_WAITS            =  0
LOCK_ESCALS           =  0
LOCK_TIMEOUTS         =  0
POOL_READS            =  1
POOL_WRITES           =  0
QUERYOPT              =  5
ESTIMATED_COST        =  8
TOTAL_COST            =  7.6209
NETWORK_TRIPS         =  2
BYTES_SENT            =  462
BYTES_RECEIVED        =  2364  


Utilitário SQL Buffer

Essa facilidade de editor integrada suportada pelo CLPPlus pode ser usada ao desenvolver grandes blocos SQL ou PL/SQL. Ela fornece diferentes utilitários de buffer que podem ser úteis para editar, salvar e executar o conteúdo do utilitário SQL Buffer de forma rápida e eficiente. O utilitário SQL Buffer pode ser útil para:

  • Modificar o conteúdo do utilitário SQL Buffer excluindo, inserindo ou substituindo uma linha no buffer
  • Carregar o conteúdo de um arquivo no buffer SQL
  • Editar o conteúdo do buffer usando editor externo
  • Executar o conteúdo do buffer
  • Salvar o conteúdo do buffer em um arquivo

Qualquer comando SQL ou PL/SQL executado anteriormente no CLPPlus é armazenado no utilitário SQL Buffer. O comando LIST pode ser usado para listar o conteúdo do buffer SQL no console. Se o usuário desejar ver somente uma linha específica no buffer, então LIST, seguido do número da linha, exibirá o conteúdo daquela linha no console, como mostra o exemplo abaixo. Somente inserir o número da linha também listará o conteúdo do buffer no número de linha dado.


Lista 27. Comando LIST

SQL> select * from employee
  2  where firstnm='MICHAEL';
ERROR near line 1:
SQL0206N  "FIRSTNM" is not valid in the context where it is used.


SQL> list
 1  select * from employee
 2* where firstnm='MICHAEL'


SQL> list 2
 2* where firstnm='MICHAEL'

SQL> 1
 1* select * from employee

Uma cadeia de caractere específica no utilitário SQL Buffer pode ser substituída usando o comando CHANGE. Também é possível substituir o texto no buffer em um dado número de linha ou remover a primeira ocorrência de uma cadeia de caractere na linha atual usando esse utilitário.

O exemplo abaixo substitui o token firstnm por firstnme usando o comando CHANGE.


Lista 28. CHANGE
  
SQL> list
 1  select * from employee
 2* where firstnm='MICHAEL'

SQL> change /firstnm/firstnme/
 2* where firstnme='MICHAEL'   

No exemplo abaixo, o texto na linha 2 é substituído pela nova linha de texto. Aqui, 2 representa o número da linha a ser substituída no buffer, seguido do texto.


Lista 29. Substituição de linha usando o número da linha
   
SQL> 2 where salary>10000
 2* where salary>10000

SQL> list
 1  select * from employee
 2* where salary>10000 

Podemos anexar texto ao conteúdo do utilitário SQL Buffer ou adicionar texto em uma nova linha no buffer usando os comandos APPEND e INPUT, respectivamente. O utilitário DEL pode ser usado para excluir uma linha específica no buffer. Os exemplos abaixo demonstram esses utilitários.


Lista 30. INPUT, APPEND e DEL
   
SQL> input select * from employee
SQL> list
 1* select * from employee

SQL> append  where
SQL> list
 1* select * from employee where

SQL> input salary>10000
SQL> list
 1  select * from employee where
 2* salary>10000

SQL> del 2

SQL> list
 1* select * from employee where

SQL> input firstnme='MICHAEL'

SQL> list
 1  select * from employee where
 2* firstnme='MICHAEL'  

O CLPPlus suporta o carregamento do conteúdo de um arquivo para o utilitário SQL ou o salvamento do conteúdo do buffer em um arquivo, o que é útil ao desenvolver scripts SQL entre várias sessões ou várias máquinas. O utilitário SAVE pode ser usado para salvar o conteúdo do buffer em um arquivo e o utilitário GET pode ser usado para carregar o conteúdo de um arquivo no utilitário SQL Buffer.


Lista 31. Utilitários GET e SAVE
    
SQL> get c:\buffer.sql
 1* select * from employee

SQL> input where salary > 10000

SQL> list
 1  select * from employee
 2* where salary > 10000

SQL> save c:\buffer1.sql
DB250000I: The command completed successfully.  
 

O comando barra invertida (/) executa o conteúdo presente no utilitário SQL Buffer. E o comando CLEAR limpa o conteúdo do utilitário SQL Buffer.


Lista 32. Utilitário de limpeza do buffer
  
SQL> list
 1* select firstnme, salary from employee fetch first 2 rows only

SQL> /

FIRSTNME                         SALARY
--------------- -----------------------
MICHAEL                           15500
JOE                               11100

SQL> clear buffer
DB250000I: The command completed successfully.

SQL> list
DB250419W: The SQL buffer is empty. 

O conteúdo do utilitário SQL Buffer também pode ser editado usando um editor externo com a ajuda do comando EDIT . EDIT chama o editor externo com o conteúdo do utilitário SQL Buffer carregado nele, que pode ser modificado pelo usuário e salvo novamente no buffer. Os usuários podem configurar o editor externo a ser usado conforme o requisito.


Envio para spool

Atividades que ocorrem em uma sessão do CLPPlus podem ser gravadas em um arquivo usando o recurso de envio para spool. Isso será útil ao desenvolver scripts SQL com comandos executados em uma sessão do CLPPlus. Como resultado, todos os comandos executados e a saída são gravados em um arquivo que pode ser processado para desenvolver os arquivos de script.

É preciso especificar um arquivo ao ativar o envio para spool, no qual a saída da exibição é gravada. O envio para spool também pode ser desativado em qualquer ponto em uma sessão, como mostrado abaixo.


Lista 33. Comando spool
   
SQL> spool c:\spooler.sp

SQL> select firstnme, salary from employee fetch first 2 rows only;

FIRSTNME                         SALARY
--------------- -----------------------
MICHAEL                           15500
JOE                               11100

SQL> spool off


Conclusão

Esse artigo forneceu valor para usuários migrando do Oracle para o DB2 oferecendo uma visão geral do suporte à compatibilidade com SQL fornecida no CLPPlus. O CLPPlus tem um papel importante ao possibilitar a migração de scripts de usuários para o DB2, e, portanto, esse artigo pode ser um bom ponto de referência para obter um panorama mais amplo de recursos de compatibilidade com SQL suportados no CLPPlus.

Esse artigo também será útil para usuários existentes do DB2, ao ajudá-los a se familiarizar com as facilidades fornecidas pelo CLPPlus, que são iniciantes nas ferramentas de linha de comando do DB2 e podem ajudá-los a realizar suas tarefas de maneira muito melhor.

Para saber mais sobre o CLPPlus e seus comandos suportados, acesse o Centro de Informações do DB2 para Linux, UNIX e Windows V9.7 .


Recursos

Aprender

Obter produtos e tecnologias

  • Faça o download das O DB2 Express-C, a edição gratuita do banco de dados DB2 para Linux, Windows, Solaris e Mac que é fácil de usar e fornece uma base sólida para criar e implementar aplicativos.

  • Faça o download de uma cópia de avaliação do DB2 para Linux, UNIX e Windows para experimentá-lo em seu próprio ambiente

  • Crie seu próximo projeto de desenvolvimento com a versão de teste do software IBM, disponível para download diretamente no developerWorks.

Discutir

Sobre o autor

Mangesh Shanbhag photo

Mangesh é Staff Software Engineer e trabalha na IBM India pelos últimos três anos e meio. Desde então, ele está associado com o desenvolvimento de ferramentas de Information Management no India Software Lab. Ele tem cerca de cinco anos de experiência em desenvolvimento de produto de software. Atualmente, ele trabalha com a equipe Common Application Development, em que desenvolve recursos de relatórios, script e compatibilidade com o SQL do CLPPlus. Ele é formado em ciência da computação pela VTU Karnataka (Índia). Em seu tempo livre, ele gosta de ler livros e assistir filmes. Ele também é um ávido fã de esportes.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management
ArticleID=758679
ArticleTitle=Compatibilidade com SQL no CLPPlus
publish-date=09222011
author1-email=manshanb@in.ibm.com
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).