Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

oracleJR

Utilizar variável no Select

Recommended Posts

Olá! Estou com um problema ao usar o conteúdo de uma variável em um select. Quero fazer uma consulta dinâmica, então a cada iteração, o valor da variável deverá sofrer alteração e com isso o select também. Eu tenho vários owners que são as diferentes filiais (lojas). Ex: select campos from LJ0999.TABELA WHERE CAMPO = XXXX. Quero substiuir o conteúdo LJ0999(valor estático) do Select pelo conteúdo da variável. Já tentei entre outras formas concatenar 'LJ'||VARIAVEL||.TABELA, 'LJ||VARIAVEL.TABELA'. OBS: A variável retorna 3 números inteiros, sendo que o LJ deve ser concatenado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

||Lpad(variavel,4,'0')||

 

Tentei mas não funcionou: Tentei assim:

 

 

Select *

 from ||LPAD(Variavel, 5, 'LJ')||.TABELA@DBLINK Alias 

WHERE CAMPO='XXXX'. 

 

 

 

Neste caso o LPAD retorna:LJ033, concatenando com o restante: seria LJ033.TABELA@DBLINK...Talvez seja a questão das aspas simples..tentei

 

 

select *

 from to_char||LPAD(Variavel, 5, 'LJ')||.TABELA@DBLINK 

WHERE CAMPO='XXXX'.

 

 

Nada funcionou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, você teria de montar o sql de forma dinamica e executá-lo via EXECUTE IMMEDIATE

 

Pelo que entendi se tem uma tabela de lojas em um owner e se quer executar uma "mesma" query em diversos owners

 

A procedure ou bloco deverá montar um cursor com estas lojas e execut-alas até o fim do cursor.

 

Veja estes exemplos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei mas não funcionou: Tentei assim:

 

 

Select *

 from ||LPAD(Variavel, 5, 'LJ')||.TABELA@DBLINK Alias 

WHERE CAMPO='XXXX'. 

 

 

 

Neste caso o LPAD retorna:LJ033, concatenando com o restante: seria LJ033.TABELA@DBLINK...Talvez seja a questão das aspas simples..tentei

 

 

select *

 from to_char||LPAD(Variavel, 5, 'LJ')||.TABELA@DBLINK 

WHERE CAMPO='XXXX'.

 

 

Nada funcionou

Não..Estou tentando colocar todo o select dentro de uma variável...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algo assim

 

DECLARE
  VS_SQL VARCHAR2(4000);
BEGIN
   --ROTINA DE REPETIÇÃO
   BEGIN
     VS_SQL := 'SELECT * FROM ' || LPAD(Variavel, 5, '0') || 'LJ' || '.TABELA@DBLINK';
     EXECUTE IMMEDIATE VS_SQL;
   END;
END;

Veja na documentação formas de tratar um cursor neste EXECUTE IMMEDIATE

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.