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
  

Mensagemem Qua, 05 Dez 2007 10:54 am

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?
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 11:43 am

Brother, beleza?

Usa este script abaixo, trocando o nome entre aspas, pelo nome do teu objeto:
Código: Selecionar todos
SELECT OBJECT_TYPE
  FROM USER_OBJECTS   -- OU ALL_OBJECTS
WHERE OBJECT_NAME = 'TEU_OBJETO';


qualquer coisa, manda ai.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Qua, 05 Dez 2007 11:58 am

o resultado foi SYNONYM

significa que é uma tabela?
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 12:46 pm

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..
Código: Selecionar todos
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
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qua, 05 Dez 2007 1:46 pm

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.
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 2:07 pm

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 também.

[]'s
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qua, 05 Dez 2007 2:21 pm

Opa, em OWNER está relacionado todos os usuários do sistema, em TABLE_OWNER está o nome do sistema.
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 2:34 pm

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

[]'s
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qua, 05 Dez 2007 2:54 pm

o select que utilizei é esse:

Código: Selecionar todos
SELECT * FROM USER_OBJECTS WHERE OBJECT_NAME = 'FORNEC'



o resultado foi esse:

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>
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 3:01 pm

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

[]'s
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qua, 05 Dez 2007 3:04 pm

Imagem
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 3:08 pm

o resultado foi o seguinte:

Imagem
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 3:21 pm

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

[]'s
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qua, 05 Dez 2007 3:28 pm

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?
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 4:13 pm

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

Código: Selecionar todos
SELECT * FROM all_views WHERE VIEW_NAME = 'SUA_VIEW'


[]'s
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qua, 05 Dez 2007 5:04 pm

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;

Código: Selecionar todos
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(+)
marquesjr
Localização: Fortaleza - CE

Mensagemem Qua, 05 Dez 2007 5:31 pm

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.
Código: Selecionar todos
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
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qua, 05 Dez 2007 5:38 pm

saquei, saquei. perfeito, agradesço imensamente pela ajuda, foi e é(já que fica postado no forum) de grande serventia.
marquesjr
Localização: Fortaleza - CE



Voltar para SQL

Quem está online

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