passar um parametro para um select

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
henrique290
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Ter, 09 Out 2007 11:36 pm
Localização: Porto Alegre - RS

Tenho um select bem extenso tenho que mudar o mês para executar ele. Gostaria de colocar uma variavel para fosse subtituida no momento da execussão.
Algo assim

Selecionar tudo

mês=4 /* abril*/

select * from tabela where 
extract (month from data)=&mês
se fosse sempre o mês corrente eu so colocaria o extract na data atual e pronto, mas tenho que trazer dados de meses difrentes

Agradeço desde já a ajuda e desculpa se postei no local errado já que me inscrevi hoje e não conheço bem o forum.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, existem duas formas para se resolver esta situação:

A primeira, seria criar um CURSOR que receba parâmetros:

Selecionar tudo


-- Cursor com Parâmetro ------------------------------------------------------

DECLARE 
  
  CURSOR cur_empregados (p_empno NUMBER)
    IS 
      SELECT *
        FROM emp
       WHERE empno = p_empno;
  

  v_resultado cur_empregados%ROWTYPE;

BEGIN
  
  OPEN cur_empregados(7499);
  FETCH cur_empregados INTO v_resultado;
  CLOSE cur_empregados;
  
  dbms_output.put_line('Empregado: ' || v_resultado.ename);
  
END;    

A segunda, seria com CURSOR dinâmico.

Sobre cursor dinâmico, procure aqui no fórum esta string "cursor dinâmico" ou "dbms_sql" que irá localizar tópicos interessantes.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

E qual é o problema com seu exemplo inicial?
Eu estou no SQL*Plus, criei um script chamado data.sql assim:

Selecionar tudo

select dtexportacao
from planopagamento
where extract (month from dtexportacao)=&mês
/
Agora, no SQL*Plus, eu executo ele:

Selecionar tudo

SQL> @data
Input truncated to 1 characters
Enter value for mês: 10
old   3: where extract (month from dtexportacao)=&mês
new   3: where extract (month from dtexportacao)=10

DTEXPORTACA
-----------
01-OCT-2007
09-OCT-2007
03-OCT-2005
01-OCT-2007
02-OCT-2007
19-OCT-2005
09-OCT-2007
01-OCT-2007
09-OCT-2007
04-OCT-2007
09-OCT-2007
01-OCT-2007

12 rows selected.

SQL> @data
Input truncated to 1 characters
Enter value for mês: 5
old   3: where extract (month from dtexportacao)=&mês
new   3: where extract (month from dtexportacao)=5

DTEXPORTACA
-----------
21-MAY-2007
17-MAY-2005
17-MAY-2005
17-MAY-2005
09-MAY-2007
09-MAY-2007

6 rows selected.

SQL> 
Como pode ver, ele só mostra o mês informado! Não tem erro :-D
Responder
  • Informação
  • Quem está online

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