oracleJR 0 Denunciar post Postado Janeiro 2, 2014 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
Motta 645 Denunciar post Postado Janeiro 2, 2014 http://www.techonthenet.com/oracle/functions/lpad.php Tente com LPAD, converte para CHAR. Compartilhar este post Link para o post Compartilhar em outros sites
oracleJR 0 Denunciar post Postado Janeiro 3, 2014 http://www.techonthenet.com/oracle/functions/lpad.php Tente com LPAD, converte para CHAR. Fazer algo como: select campos from to_char(VARIAVEL,3,*).TABELA where campo='xxxx'. Mais ou menos isso? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 3, 2014 ||Lpad(variavel,4,'0')|| Compartilhar este post Link para o post Compartilhar em outros sites
oracleJR 0 Denunciar post Postado Janeiro 3, 2014 ||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
Motta 645 Denunciar post Postado Janeiro 3, 2014 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
oracleJR 0 Denunciar post Postado Janeiro 3, 2014 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
Motta 645 Denunciar post Postado Janeiro 3, 2014 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