Ir para conteúdo

POWERED BY:

Arquivado

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

Patricia_W

Verificar se View é igual à Tabela

Recommended Posts

Olá!

 

Pessoal, sou nova por aqui..

Estou precisando de uma ajuda..

 

Preciso identificar se uma view criada no banco de dados é 100% igual à estrutura da tabela na qual ela se baseia.

 

Por exemplo, se eu tenho a tabela XPTO com 5 colunas e 1000 linhas, quero identificar que esta view  retorna, ao se realizar um select nela, as mesmas 5 colunas  e 1000 linhas, sem nenhum tipo de filtro ou modificação na apresentação das colunas.

No meu caso, posso ter aliases nas views. Ex:

 

TABELA XPTO

Name      Type         Nullable Default Comments 
--------- ------------ -------- ------- -------- 
XPTOCOD   NUMBER(12)                             
XPTONOM   VARCHAR2(30)                           
 
CREATE OR REPLACE VIEW V_XPTO
(COD_XPTO, NOM_XPTO)
AS
SELECT XPTOCOD, XPTONOM   FROM XPTO
 

O que preciso é identificar justamente os casos acima e desconsiderar quando as views não forem 100% da tabela, como nos casos abaixo (entre outros). 

 

CREATE OR REPLACE VIEW V_XPTO
(COD_XPTO, NOM_XPTO, DESCRICAO)
AS
SELECT XPTOCOD, XPTONOM, 'TEXTO'
       FROM XPTO
------

CREATE OR REPLACE VIEW V_XPTO
(COD_XPTO, NOM_XPTO)
AS
SELECT XPTOCOD, XPTONOM
       FROM XPTO
       WHERE COD_XPTO > 10
------ 

CREATE OR REPLACE VIEW V_XPTO
(COD_XPTO, NOM_XPTO)
AS
SELECT XPTOCOD, XPTONOM
       FROM XPTO
       GROUP BY XPTOCOD 
------     
CREATE OR REPLACE VIEW V_XPTO
(COD_XPTO)
AS
SELECT XPTOCOD
       FROM XPTO
------
CREATE OR REPLACE VIEW V_XPTO
(NOM_XPTO)
AS
SELECT SUBSTR(XPTONOM,1,2)
       FROM XPTO
------    
CREATE OR REPLACE VIEW V_XPTO
(COD_XPTO, NOM_XPTO)
AS
SELECT XPTOCOD, XPTONOM
       FROM XPTO, ABC
       WHERE XPTO.XPTOCOD = ABC.XPTOCOD
       

 

Voces conhecem alguma forma de fazer isso??

 

Obrigada :))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe uma VIEW de Metadados que lista as views

DBA_VIEWS

precisa ter acesso de DBA 

 

pela sql 

 

SELECT OWNER,'VIEW' ,VIEW_NAME,TEXT_VC 
FROM DBA_VIEWS 

Se consegue ter acesso ao "texto" da VIEW 

 

Notas :

   as colunas 

TEXT    LONG()    Yes        4    View text
TEXT_VC    VARCHAR2(4000)    Yes        5    Possibly truncated view text as VARCHAR2

 

   existe também a vew USER_VIEWS limitada as views do user logado

 

tem alguns "poréns" as do tipo LONG são mais difíceis de tratar e a TEXT_VC creio só existir na versão 12.

 

outra metadados que pode ser usada é a ALL_TAB_COLUMNS que permite ver as colunas de tabelas ou views , um join entre as tabelas e as views poderia ser feito 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, tenho acesso DBA, já estou usando a  DBA_VIEWS pra extrair o texto,  porém desta forma que sugeriu eu teria que avaliar visualmente/manualmente, correto? e no caso de muitas views isso se torna inviável.. No caso agora, eu estou precisando avaliar umas 150 views.. 

E no caso da ALL_TAB_COLUMNS eu não consigo ter certeza que é a mesma coluna da tabela pois, como eu disse, as colunas das views tem alias.

 

Mas valeu pela ajuda ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o texto da view dá para varrer a string e tentar localizar , eu faria uma busca por amostragem e ia tentando ir refinando a select que vai em dba_views 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa se não entendi.. 

 

Mas eu teria que varrer se não tem:

WHERE

AND

COUNT

GROUP

( )

< >

=

etc... 

fora todas as formas de formatação de colunas possíveis.. é essa sua ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algo assim :

 

SELECT OWNER,'VIEW' ,VIEW_NAME,TEXT_VC 
FROM DBA_VIEWS
WHERE (UPPER(TEXT_VC) LIKE '%COUNT(%' OR
       UPPER(TEXT_VC) LIKE '%GROUP BY%')

pelo menos reduz o universo a ser visto 

 

WHERE - trará quase todos

AND - idem 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, estou fazendo esta busca já, com as strings abaixo..

WHERE    COUNT    AND     GROUP      SUM      MIN     MAX    CASE      IS     NOT     IN     ORDER    |    --    JOIN      NULL    (    )    [    ]    =    '    /    >    <    +    -    !

só queria tentar achar uma forma mais otimizada que fizesse com que eu tivesse que fazer o mínimo de comparação manual.

Do meu universo de 150, ainda restaram 75 pra eu comparar manualmente.. é meio inviável fazer isto com frequencia..  ;)

E ainda tem o escopo de colunas que este filtro de "where", "and" e etc.. não trata.. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

poderia fazer uma FUNCTION para contar algumas ocorrências ,

 

select where por exemplo só poderiam (no seu caso) ter uma ocorrência  

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por babylon
      Olá galera tudo bem?
      Deixa eu perguntar, estava mexendo no meu site e queria adicionar em html essa tabela porem esta dando erro pois fica assim:
       

      Porem gostaria que ficasse assim:

      Segue o código da tabela:
      <center><table border="0">
          <tr>
      <td bgcolor="#0092df" width="24%"><a href="/categorias?ename=smartphones"><span style="font-size: 20px; color: #ffffff;"><b> <font color="#0092df">..</font>Bicicleta<br> <font color="#0092df">..</font>Track Bikes<br> <font color="#0092df">..</font>Aro 29 TKS</b></a></span><br><br><font size="5"><center><span style="background-color: #A1CD44">DE:</span></font> <br><font size="5"><s>R$ 1.999,99</center></font></s> </td><td><p><a href="/categorias?ename=smartphones"><img src="/static/img/itembicicleta.jpg"><br><font size="5"><center><span style="background-color: #A1CD44">COM - 60%:</span></font> <br><font size="5">1.199,99</font></center></a></td>
             <td><font color="#ffffff">....</font></td>
              <td bgcolor="#0092df" width="24%"><a href="/categorias?ename=smartphones"><span style="font-size: 20px; color: #ffffff;"><b> <font color="#0092df">..</font>Monitor 24"<br> <font color="#0092df">..</font>Samsung<font color="#0092df">aa.aa</font><br> <font color="#0092df">..</font>1ms 144hz</b></a></span></center></td><td><p><a href="/categorias?ename=smartphones"><img src="/static/img/itemmonitor.jpg"></a></td>
          </tr>
          </table></center>
      O que estaria errado, pois não sei como colocar nessa tabela outro fundo de outra cor, veja que usei td bgcolor="#0092df" para o azul escuro mas não sei como usaria pro "#e4f1fb" para o fundo ficar de azul claro em baixo bem como não ficou correto em altura o "DE:" com o "COM - 60%:".
      Bom é isso, obg.


    • Por clovis.sardinha
      Bom dia.
      Meu problema é o seguinte:
      Estou fazendo uma tabela e preciso mostrar o usuário e várias cidades que pertencem a este usuário.
      O resultado do array é o seguinte:

      Quando passo para a tabela os valores de cidade se repetem para o mesmo usuário até o final e retorna fazendo o mesmo para o próximo usuário. 
      Veja abaixo

       
      Meu código para a tabela é a seguinte:
      <tr> <td align="left"><?php echo $usuario['nome'] ?></td> <td align="left"><?php echo $usuario['nome_orgao'] ?></td> <td align="left"><?php echo $usuario['nome_funcao'] ?></td> <?php foreach($destinos as $key=>$destino):?> <?php $key=0;?> <td align="left"> <?php foreach($destino as $chave=> &$cidade): ?> <?php echo $cidade['cid_nome']."-";?> <?php endforeach;?> </td> <?php $key+=$key; ?> <?php endforeach;?> <td><?php echo date('d/m/Y', strtotime( $usuario['created_at'])) ?></td> <td align="left"><a href="<?php echo base_url('UserAdmin/Usuario/getUsuarioById')."/".$usuario['id_user'] ?>">DETALHES</a></td> </tr> <?php endforeach ?> Onde estou errando? O que tenho de fazer para percorrer este array de modo a aparecer apenas as cidades pertencentes a cada usuário?

    • Por MarceloEBM
      Baixei a tabela do melhorenvio e adaptei para o formato da webcontinental que eles disponibilizam, enviei para o gerente de conta e ele disse que rodou, não atualizou e não tem nenhuma mensagem de erro pra me passar.
       
      Posso estar fazendo errado, alguém tem alguma experiencia com esta tabela de frete?
    • Por Jack Oliveira
      Ola pessoal boa noite preciso salvar umas coisas no banco de dados usando ao clicar no botão que esteja aparecendo sem que recarregue a página
       
      Seria isso aqui
       
      HTML do botão
      <div class="btn-group"> <a href="javascript:void(0)" class="rate-btn toggole-contnet"> <i class="fa fa-thumbs-o-up" aria-hidden="true"></i> Sim </a> <a href="javascript:void(0)" class="rate-btn toggole-contnet"> <i class="fa fa-thumbs-o-down" aria-hidden="true"></i> Não </a> </div> No PHP para salvar no banco esta da seguinte forma.
      <?php if(isset($_POST['AvaliComentario'])) { // Se o cookie ainda não foi setado $cookie = isset($_COOKIE["avali_comentario_".$Comentario['id']]) ? $_COOKIE["avali_comentario_".$Comentario['id']] : null; if (!isset($cookie)) { $Adicionar = array( 'comentario_id' => $Comentario['id'], 'up' => post('up'), 'down' => post('down') ); $Query = DBCreate('avali_comentario', $Adicionar); // Se for um sucesso a query if ($Query) { // Seta um cookie setcookie("avali_comentario_".$Comentario['id']."", true, time()+60*60*24*6004); // Retorna false, ou seja, sucesso echo false; Redireciona(''.$URLSHARE.''); }else{ //AbreAlerta("Erro! Ouve um erro ao ".$dados['titulo']."!"); //Redireciona(''.$URLSHARE.''); } }else{ //Sweet('Atenção!!!', 'Você já deu sua Curtida para '.$dados['titulo'].'!', 'warning', 'Fechar'); //AbreAlerta("Ops! Você já deu sua Curtida para ".$dados['titulo']."!"); //Redireciona(''.$URLSHARE.''); } } Só preciso para quando clicar uns dos botão ele salvar sem precisar carregar a página...
       
      Se ter um forma diferente para fazer fico grato pelas dicas que puderem dar ai..
       
       
    • Por Sapinn
      Tenho uma tabela e gostaria de multiplicar a quantidade de produtos para a compra com o valor unitário e gerar o valor total e colocar em outra td, alguém sabe como fazer isso???
       
       <table class="table-default">                 <thead>                     <th>Produto</th>                     <th>Quant</th>                     <th>Valor Unit.</th>                     <th>Valor Total</th>                     <th>Alterar</th>                     <th>Excluir</th>                 </thead>                 <tbody>                     <tr>                         <td>Placa Mãe</td>                         <td class="quant_produto">1</td>                         <td class="valor_produto">100,00</td>                         <td class="total-produto"></td>                         <td><a href=""><i class="bi bi-pencil-fill"></i></a></td>                         <td><a href=""><i class="bi bi-trash-fill"></i></a></td>                     </tr>                                         <tr>                         <td>Memoria Ram DDr3</td>                         <td class="quant_produto">1</td>                         <td class="valor_produto">50,00</td>                         <td class="total-produto"></td>                         <td><a href=""><i class="bi bi-pencil-fill"></i></a></td>                         <td><a href=""><i class="bi bi-trash-fill"></i></a></td>                     </tr>                     <tr>                         <td>Memoria Ram DDr3</td>                         <td class="quant_produto">1</td>                         <td class="valor_produto">50,00</td>                         <td class="total-produto"></td>                         <td><a href=""><i class="bi bi-pencil-fill"></i></a></td>                         <td><a href=""><i class="bi bi-trash-fill"></i></a></td>                     </tr>                 </tbody>             </table>  
×

Informação importante

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