Tabela ou Visão?

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

Fala galera,

Gostaria de importar uns dados porém estou na dúvida se a "tabela" que efetuei a consulta é uma tabela ou uma visão. Tem como identificar se um "tabela" é uma tabela ou uma visão?
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, beleza?

Usa este script abaixo, trocando o nome entre aspas, pelo nome do teu objeto:

Selecionar tudo

SELECT OBJECT_TYPE 
  FROM USER_OBJECTS   -- OU ALL_OBJECTS
 WHERE OBJECT_NAME = 'TEU_OBJETO';
qualquer coisa, manda ai.
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

o resultado foi SYNONYM

significa que é uma tabela?
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Não, o synonym funciona como se fosse um "apelido" pra algum outro objeto, objeto que pode ser ou não de outro owner da sua base..
pra saber a origem desse objeto consulte dos dados dele..

Selecionar tudo

SELECT *
  FROM all_synonyms
 WHERE synonym_name = 'SUA_TABELA'
ele vai te informar quem é o owner e o nome do objeto original, ai com esses dados verifique se o original é uma table ou uma view utilizando o exemplo que o Trevisolli passou..

[]'s
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

então, fiz a consulta e apareceu o seguinte

OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME, DB_LINK

no caso o objeto que consultei 'FORNEC' está com o mesmo nome tanto para o SYNONYM_NAME como para TABLE_NAME.

o seguinte raciocínio é correto:

Todo objeto que estiver relacionado no campo TABLE_NAME é uma tabela? e nunca um visão aparecerá em TABLE_NAME?

Valeu a ajuda.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

E o owner do objeto, é o mesmo?

Sobre o campo table_name da all_synonyms, apesar do nome do campo ser TABLE_NAME é possível você ter nesse campo o nome de uma view tb.

[]'s
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

Opa, em OWNER está relacionado todos os usuários do sistema, em TABLE_OWNER está o nome do sistema.
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

O select q você rodou pesquisando esse objeto foi na USER_OBJECTS ou na ALL_OBJECTS??

[]'s
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

o select que utilizei é esse:

Selecionar tudo

SELECT * FROM USER_OBJECTS WHERE OBJECT_NAME = 'FORNEC'
o resultado foi esse:

Selecionar tudo

From: <Salvo pelo Microsoft Internet Explorer 7>
Subject: 
Date: Wed, 5 Dec 2007 14:48:29 -0300
MIME-Version: 1.0
Content-Type: text/html;
	charset="Windows-1252"
Content-Transfer-Encoding: 7bit
Content-Location: =?Windows-1252?Q?file://C:\Documents_and_Settings\u012215.M01AUD0149\Conf?=
	=?Windows-1252?Q?igura=E7=F5es_locais\Temp\SQLT0005.HTM?=
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252">
<META content="MSHTML 6.00.6000.16544" name=GENERATOR></HEAD>
<BODY>
<TABLE cellSpacing=0 cellPadding=1 border=1>
  <TBODY>
  <TR>
    <TH>OBJECT_NAME</TH>
    <TH>SUBOBJECT_NAME</TH>
    <TH>OBJECT_ID</TH>
    <TH>DATA_OBJECT_ID</TH>
    <TH>OBJECT_TYPE</TH>
    <TH>CREATED</TH>
    <TH>LAST_DDL_TIME</TH>
    <TH>TIMESTAMP</TH>
    <TH>STATUS</TH>
    <TH>TEMPORARY</TH>
    <TH>GENERATED</TH>
    <TH>SECONDARY</TH></TR>
  <TR>
    <TD>FORNEC</TD>
    <TD>&nbsp;</TD>
    <TD align=right>5089671</TD>
    <TD align=right>&nbsp;</TD>
    <TD>SYNONYM</TD>
    <TD>27/08/07</TD>
    <TD>17/09/07</TD>
    <TD>2007-09-17:10:35:56</TD>
    <TD>VALID</TD>
    <TD>N</TD>
    <TD>N</TD>
    <TD>N</TD></TR></TBODY></TABLE></BODY></HTML>
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Faz um select na ALL_OBJECTS, é pra aparecer outro objeto que não seja o synonym que você achou na user_objects.

[]'s
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

Imagem
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

o resultado foi o seguinte:

Imagem
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Esse objeto é uma table, e o proprietario dela é o Piramide..

[]'s
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

valeu mesmo pela ajuda, agora dá pra identificar as tabelas.

aproveitando...

tem como identificar qual select foi utilizado em determinada visão pela consulta no banco?
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Opa, tem sim.
da uma olhada no campo text da tabela all_views.

Selecionar tudo

SELECT * FROM all_views WHERE VIEW_NAME = 'SUA_VIEW'
[]'s
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

Rapaz, mais um vez valeu mesmo, tabela muito importante essa :-o

gerei a consulta e apareceu no campo TEXT o seguinte:

Só fiquei com a seguinte dúvida não encontrei o objeto Saldo_Atual especificado no select abaixo;

Selecionar tudo

Select Saldo_Atual.cd_contagem
     , Saldo_Atual.dt_contagem
     , Saldo_Atual.hr_contagem
     , Saldo_Atual.dt_geracao
     , Saldo_Atual.hr_geracao
     , Saldo_Atual.cd_produto
     , Saldo_Atual.Qt_estoque
     , Saldo_Atual.Qt_estoque_doado
     , Saldo_Atual.vl_custo_medio
     , Nvl(Saldo_Anterior.qt_anterior, 0) Qt_Anterior
     , Nvl(Saldo_Anterior.qt_anterior_doado, 0) Qt_Anteior_Doado
     , Saldo_Atual.ds_unidade
  From (
Select contagem.cd_contagem
     , contagem.dt_contagem
     , contagem.hr_contagem
     , contagem.dt_geracao
     , contagem.hr_geracao
     , itcontagem.cd_produto
     , Sum(itcontagem.qt_estoque * uni_pro.vl_Fator) qt_estoque
     , Sum(itcontagem.qt_estoque_doado * uni_pro.vl_fator) qt_estoque_doado
     , avg(itcontagem.vl_custo_medio / uni_pro.vl_fator ) vl_custo_medio
     , 0 qt_anterior
     , 0 qt_anterior_doado
     , uni_pro.ds_unidade
  From Dbamv.Contagem
     , Dbamv.ItContagem
     , Dbamv.Uni_Pro
 Where Contagem.Cd_Contagem = ItContagem.Cd_Contagem
   And ItContagem.Cd_Uni_Pro = Uni_Pro.Cd_Uni_Pro
Group By Contagem.Cd_Contagem
       , contagem.Dt_Contagem
       , contagem.Hr_Contagem
       , contagem.Dt_Geracao
       , contagem.Hr_Geracao
       , itcontagem.Cd_Produto
       , Uni_Pro.Ds_Unidade
       ) Saldo_Atual
     , (
Select Copia_Estoque.Cd_Contagem
     , Null          dt_contagem
     , Null          hr_contagem
     , Null          dt_geracao
     , Null          hr_geracao
     , Copia_Estoque.cd_produto
     , 0 qt_estoque
     , 0 qt_estoque_doado
     , 0 vl_custo_medio
     , Sum(Copia_Estoque.Qt_Estoque) qt_anterior
     , Sum(Copia_Estoque.Qt_Estoque_Doado) qt_anterior_doado
     , Null  ds_unidade
  From Dbamv.Copia_Estoque
Group By Copia_Estoque.Cd_Contagem
       , Copia_Estoque.cd_produto
       ) Saldo_Anterior
Where Saldo_Atual.Cd_Contagem = Saldo_Anterior.Cd_Contagem(+)
  And Saldo_Atual.Cd_Produto = Saldo_Anterior.Cd_Produto(+)
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Nesse caso o "Saldo_Atual" não é um objeto do seu banco, ele é um "alias" pra um trecho do seu select... vai um exemplo do que foi feito na sua consulta.

Selecionar tudo

SELECT Saldo_Atual.* 
  FROM (SELECT SYSDATE 
          FROM DUAL) Saldo_Atual
como você pode ver a clausua from não é uma tabela em especifico, e sim o resultado de um select, resultado que pode ter o alias que você quiser..

[]'s
marquesjr
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 77
Registrado em: Qua, 05 Dez 2007 10:51 am
Localização: Fortaleza - CE

saquei, saquei. perfeito, agradesço imensamente pela ajuda, foi e é(já que fica postado no forum) de grande serventia.
Responder
  • Informação
  • Quem está online

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