Pular para o conteúdo
  • Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 6 anos, 8 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #109171
    Avatar de Leopoldo de SousaLeopoldo de Sousa
    Participante

      Caros(as),
      Boa tarde.

      Estou quebrando a cabeça há 3 dias, estou precisando de uma query que me retorne determinada “Palavra” em qualquer tabela de um usuário específico.

      Sei que a tabela all_source possui o campo TEXT, porém nessa tabela só consigo consultar tal palavra em objetos tais como: PROCEDURE, PACKAGE, PACKAGE BODY, LIBRARY,TYPE BODY
      TRIGGER, FUNCTION, JAVA SOURCE e TYPE.

      Já nas tabelas all_tab_columns ou user_tab_columns, não existe o campo “TEXT”.

      Existe alguma forma de encontrar tal informação?

      Grato.

      #109172
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Blz ? Então, explica um pouco melhor : quando vc diz ‘encontrar determinada “Palavra” em qualquer tabela”, essa palavra/essa string vai estar contida no nome da tabela ? No nome de alguma coluna de alguma tabela ? Ou não, vc quer Efetivamente buscar nos dados contidos / gravados dentro de uma tabela, só que vc não sabe nem qual é a tabela E NEM qual é a coluna ??
        Se for esse último caso, vc tem um pequeno problema aí : POR DEFINIÇÃO NO PADRÃO SQL (pode consultar os manuais e os livros de referência), para poder retornar/pesquisar um dado via comandos SQL padrão vc ** TEM ** que saber em qual tabela o dado está E dentro de qual coluna, simples assim…. SE teu ambiente é tão ‘bagunçado’ que vc não faz nem idéia do modelo de dados, de onde cada dado é gravado, vc ACABOU DE QUEBRAR a exigência da linguagem SQL : nesse caso vc vai ter que escrever uma rotina SUA, própria, que dinamicamente monte e execute uma query em CADA UMA DAS TABELAS e CADA UMA DAS COLUNAS, simplesmente NÃO TEM COMO fazer uma busca na linguagem SQL se vc não tem os pré-requisitos… E NEM PRECISO DIZER, essa rotina VAI ser Trabalhosa de escrever : https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:37336026927381#42426083757635 é um exemplo genérico mas que vc pode aproveitar…
        A lógica aqui é ler o nome de CADA tabela de um usuário e para cada tabela que monta queries dinâmicas.. Digamos que eu tenha uma tabela T1 com dez colunas, uma T2 com 5 colunas e assim por diante teria que montar e enviar queries tipo :

        SELECT * FROM T1 WHERE coluna1=’stringaprocurar’ OR coluna2=’stringaprocurar’ OR coluna3=’stringaprocurar’…..OR coluna10=’stringaprocurar’;
        SELECT * FROM T2 WHERE coluna1=’stringaprocurar’ OR coluna2=’stringaprocurar’ OR coluna3=’stringaprocurar’…..OR coluna5=’stringaprocurar’;

        Com certeza, VAI pagar um tributo em Performance (óbvio que o Otimizador de SQL pouco pode fazer para SQLs que artificialmente acessam todas as colunas e não só as colunas-chave) MAS também vai ter um Grande esforço aí, devido à maior complexidade natural do SQL dinâmico… Um trabalhinho de louco mando e meio inútil imho mas se é o que vc quer/precisa, é o que vc vai ter que escrever…

        []s

        Chiappa

        #109173
        Avatar de Leopoldo de SousaLeopoldo de Sousa
        Participante

          Bom dia Chiappa,

          Terceira opção: “Ou não, vc quer Efetivamente buscar nos dados contidos / gravados dentro de uma tabela, só que vc não sabe nem qual é a tabela E NEM qual é a coluna ??”

          Na verdade não é o meu ambiente, a base de dados é de um fornecedor, porém ou eles realmente não sabem em qual tabela a informação está ou simplesmente não querem compartilhar a informação, como possuo uma cópia da base atualizada, decidir localizar tal tabela.

          Para clientes do tipo BM&F, temos o nome da tabela e corretora, porém para clientes do tipo BOVESPA não sabemos o nome da tabela e coluna. Então decidir procurar por “dados contidos” obrigatoriamente dentro dessa coluna. Ex.: “Nome de Corretoras”.

          Com certeza não usaram um padrão para nome de tabelas e colunas, pois já tentei localizar dessa forma.

          De quaquer forma agradeço pela atenção, vou estudar o exemplo que me passou e aplicar na base.

          Abraços

          #109174
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Bom dia, blz ? Então, mais que um padrão para nomes de tabelas e colunas, o que esse teu Fornecedor tinha que te disponibilizar é um MODELO DE DADOS, ie, uma representação de qual dado é armazenado onde, qual dado se relaciona com qual….

            Sem saber em qual das trocentas colunas das n+1! tabelas o dado que vc quer está gravado, é Simplesmente Impossível vc fazer essa busca num só SQL simples, como eu disse : toca aí então a vc escrever uma rotina (em PL/SQL provavelmente) que vai tentar consultar CADA coluna (cada coluna que possa conter STRINGS, óbvio : não tem como vc ter ‘palavras’ em colunas DATE ou NUMBER óbvio) de CADA tabela, não tem outra solução… E como eu disse, isso NÂO vai ser simples, vai dar um trabalhinho, mas se é o que vc precisa, vc VAi ter que investir o tempo/esforço necessário…

            []s

            Chiappa

            #109237
            Avatar de MottaMotta
            Participante
              #109238
              Avatar photoJosé Laurindo Chiappa
              Moderador

                Yep, parece ser exatamente a lógica que recomendei : cursor na nnn_TAB_COLUMNS recuperando as colunas com datatype string (no exemplo simples linkado o Autor só se preocupou com CHAR e VARCHAR2, se necessário teria que incluir NCHAR, NVARCHAR, CLOB e LONGs) , montar um SQL dinâmico para cada coluna encontrada e o executar, sim… Como eu disse, é algo com alguma complexidade para se escrever, E que pode ter implicações sérias em performance, mas não há outra Solução…

                []s

                Chiappa

                #109239
                Avatar de MottaMotta
                Participante

                  Este meu bloco poderia ser otimizado mas a performance sempre vai ser ruim , tipo da coisa para só usar em último caso.

                  #109240
                  Avatar photoJosé Laurindo Chiappa
                  Moderador

                    Exato : sempre vai ser performance RUIM e VAI ser algo um pouco Complexo de se escrever e entender, sim, inescapável…

                    []s

                    Chiappa

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.
                  plugins premium WordPress