Atribuir valor a variável

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
milhorini
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 05 Dez 2012 7:28 am

Olá!

Criei no sql-plus uma variável:

Selecionar tudo

variable telefone varchar2(15)
Depois, dei um print. Não há valor ainda.

Quero atribuir valor a essa variável, de modo que possa ser usada como entrada em um procedure.

A sintaxe não seria...

Selecionar tudo

define telefone='00000000000';
Acredito que não, pois com o print continua a imprimir como se nada tivesse sido atribuído.

Selecionar tudo

create or replace procedure pro_formatar_telefone(telefone IN OUT varchar)
is
begin
 telefone := '(' || substr(telefone, 1, 3) || ')' || ' ' || substr(telefone, 4, 4) || '-' || substr(telefone, 8, 4); 
 --00000000000 -> (000) 0000-0000
end;
Alguém pode me ajudar?
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi milhorini,

Você dispõe do PL/SQL (linguagem de programação da ORACLE) para trabalhar com variáveis.

Para manipular sua variável, seria melhor você trabalhar com um bloco anônimo do PL/SQL.

Primeiro, crie a sua procedure:

Selecionar tudo

create or replace procedure pro_formatar_telefone(telefone IN OUT varchar)
is
begin
   --00000000000 -> (000) 0000-0000
   telefone := '(' || substr(telefone, 1, 3) || ')' || ' ' || substr(telefone, 4, 4) || '-' || substr(telefone, 8, 4); 
end pro_formatar_telefone;
Segundo, crie o bloco anônimo e execute ele inteiro no SQL*PLUS:

Selecionar tudo

SET SERVEROUTPUT ON; -- habilita display em tela com DBMS_OUTPUT
DECLARE
    W_TELEFONE VARCHAR2(15) := '00000000000';
BEGIN
    DBMS_OUTPUT.PUT_LINE(' O TELEFONE ANTES ERA '||W_TELEFONE); -- Mostra na tela
    pro_formatar_telefone(W_TELEFONE); -- Sua procedure
    DBMS_OUTPUT.PUT_LINE(' O TELEFONE DEPOIS FICOU '||W_TELEFONE); -- Mostra na tela
END;
/
Você também poderia trabalhar no SQL*PLUS com variáveis, mas este tema seria um pouco extenso para ser tratado aqui. Abaixo, seguem alguns links que talvez lhe ajudem em sua programação:

http://docs.oracle.com/cd/B19306_01/ser ... 57/ch5.htm
http://www.comp.nus.edu.sg/~ooibc/courses/sql/plsql.htm
http://www.sqlmagazine.com.br/artigos/o ... _plsql.asp

Caso deseje desenvolver scripts com toda a potencialidade do SQL*Plus (não estamos falando aqui de PL/SQL), eu recomendaria a leitura deste livro:
Oracle SQL*Plus: The Definitive Guide
By Jonathan Gennick
Publisher: O'Reilly Media
Released: March 1999
http://www.ebook3000.com/Oracle-SQL-Plu ... 99673.html
Ele dá várias dicas e macetes sobre como tornar flexíveis scripts SQL.

Abraços,

Sergio Coutinho
danielpbarros
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Dom, 15 Jan 2012 9:34 pm
Contato:
Daniel Barros

Para scripts poderia utilizar variável de substituição (& e &&), onde armazenam valores temporáriamente. No iSQL*Plis você pode incrementar com o comando DEFINE. Esse comando cria e designa um valor a uma variável.

abs.
Daniel Barros
milhorini
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 05 Dez 2012 7:28 am

Valeu, Daniel!

Eu sei utilizar o "&", mas nunca usei o "&&". Em quais situações eu utilizo?

Wilson
danielpbarros
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Dom, 15 Jan 2012 9:34 pm
Contato:
Daniel Barros

Ei Wilson,

Segue o mesmo conceito.
Utiliza-se o && para reutilizar o valor da variável sem solicitar sempre um valor ao usuário.

ex.

Selecionar tudo

select campo1, campo2, &&campo3
from tabela
order by &campo3;
Ao usuário é solicitado o valor para a variável apenas uma vez.

abs.
Daniel.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes