Ir para conteúdo

Arquivado

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

ThaisN

[Resolvido] Problema con tabla DUAL

Recommended Posts

Olá a todos!

 

Estou com um problema em uma aplicaçao em Visual Basic onde leio dados de um Banco Oracle. Estava funcionando tudo muito bem, faço select a tabelas do banco e guardo num RecordSet e náo havia nenhum problema. Agora necessito saber o nextval de uma sequência e, para isso, vou a tabela Dual (da mesma forma que faço com as outras tabelas) e o sistema me dá o seguinte erro: TableDef, dual, no se ha encontrado

 

É necessário algum tratamento especial para a tabela DUAL?

 

Alguém pode me dar uma luz, por favor! http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif

 

Muito Obrigada a todos!

 

Obs: Náo tenho certeza se este problema se encaixa em Oracle ou VB.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dual é uma tabela que fica no owner sys feita para que selects possam acessar colunas virtuais tipo sysdate ou obter sequence.

 

Tente alterar de dual para sys.dual que deve funcionar, creio ser esta a solução mais simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dual é uma tabela que fica no owner sys feita para que selects possam acessar colunas virtuais tipo sysdate ou obter sequence.

 

Tente alterar de dual para sys.dual que deve funcionar, creio ser esta a solução mais simples.

 

 

Troquei para sys.dual no código abaixo e o erro persiste! :(

 


Public Function BuscaSeq()
    
     Dim seq
     Dim pipe As OriginatingPipe
     Dim lista As GRecordset
     
     objConnORA.CreateOriginatingPipe pipe
     
     pipe.Table = "dual"
    
     Set lista = pipe.OutputRecordset
     
     lista.MoveLast
     Dim contador
     contador = lista.RecordCount
     
     If contador < 1 Then
       MsgBox "error"
     Else
        
        seq = lista.GFields("sequniqueipid.nextval")
        
        
        BuscaSeq = seq
     End If

End Function

Mais alguma idéia?

Obrigado mais uma vez!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem acesso ao owner Sys ?

 

Verifique se a tabela não foi dropada acidentamente.

 

Pode ser problema de permissão (grant) também.

 

Se nada mais funcionar , crie uma tabela dual com um campo e um registro.

 

CREATE TABLE DUAL (

DUMMY VARCHAR2(1) NULL

)

TABLESPACE "SYSTEM"

STORAGE (

INITIAL 16 K

)

/

 

 

GRANT SELECT ON DUAL TO PUBLIC WITH GRANT OPTION;

 

 

select * from dual

 

DUMMY

X

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que é um problema de GRANT, mas náo entendo porque náo funciona.

 

O Grant da minha tabela DUAL está assim:

 

SELECT PUBLIC YES SYS DUAL

SELECT GIASYS NO GIA DUAL

SELECT GIA NO GIASYS DUAL

 

O usuário que estou usando é GIA e quando faço um selec dentro do SQL Developer conectado ao usuário GIA náo me dá nenhum error. Só dentro do meu aplicativo Visual Basic.

 

Você tem alguma idéia do que pode ser? Falta dar mais algum Grant? Em teoria, com o PUBLIC já deveria funcionar, correto?

 

Muito obrigada pela ajuda!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser a falta de um sinonimo mas você disse que com o sys.dual não localizou esta hipótese é meio que descartada.

 

Lembre que sinonimos e grants são coisas diferentes você pode ter o grant mas não o sinonimo o que obriga a qualificação da tabela (sys.dual).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde eu descubro qual é o sinônimo?

 

Te digo como está creada a tabela:

 

CREATE TABLE "SYS"."DUAL"

( "DUMMY" VARCHAR2(1 BYTE)

) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

TABLESPACE "SYSTEM" ;

 

 

DETAILS:

 

OWNER SYS

TABLE_NAME DUAL

TABLESPACE_NAME SYSTEM

CLUSTER_NAME

IOT_NAME

STATUS VALID

PCT_FREE 10

PCT_USED 40

INI_TRANS 1

MAX_TRANS 255

INITIAL_EXTENT 16384

NEXT_EXTENT

MIN_EXTENTS 1

MAX_EXTENTS 2147483645

PCT_INCREASE

FREELISTS 1

FREELIST_GROUPS 1

LOGGING YES

BACKED_UP N

NUM_ROWS 1

BLOCKS 1

EMPTY_BLOCKS 0

AVG_SPACE 0

CHAIN_CNT 0

AVG_ROW_LEN 2

AVG_SPACE_FREELIST_BLOCKS 0

NUM_FREELIST_BLOCKS 0

DEGREE 1

INSTANCES 1

CACHE N

TABLE_LOCK ENABLED

SAMPLE_SIZE 1

LAST_ANALYZED 14/03/08

PARTITIONED NO

IOT_TYPE

TEMPORARY N

SECONDARY N

NESTED NO

BUFFER_POOL DEFAULT

ROW_MOVEMENT DISABLED

GLOBAL_STATS YES

USER_STATS NO

DURATION

SKIP_CORRUPT DISABLED

MONITORING YES

CLUSTER_OWNER

DEPENDENCIES DISABLED

COMPRESSION DISABLED

DROPPED NO

COMMENTS

 

Obrigada!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK

------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------------------------------------------------------

PUBLIC DUAL SYS DUAL

 

 

Já experimentei :DUAL, SYS.DUAL (tanto com maíusculas como em minúsculas e creio que náo há diferença...) e nada.

Como uma outra tabela de outro usário funciona colocando usuario.tabela, mas para a Dual sigue a mensagem inicial de erro... http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

 

Valeu pelas dicas!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Logado como sys a query :

 

select sysdate from dual

 

funciona ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ter alguma relaçao com o TABLESPACE?

 

Como se vê abaixo, a tabela que consigo acessar de outro owner(MAATTRIBUTE) está em um Tablespace diferente...

 

 

 

OWNER TABLE_NAME TABLESPACE_NAME

------------------------------ ------------------------------ ------------------------------

GIASYS MAATTRIBUTE USERS

SYS DUAL SYSTEM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que não deva ter nada a ver com a Tablespace.

 

A mensagem é em espanhol , não seria algo relacionado ao language ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Náo é o idioma, pois todos os meus programas estáo instalados em Casteliano.

 

Consegui resolver alterando o código da seguinte forma:

 


Public Function BuscaSeq()
    
     Dim seq
     Dim pipe As OriginatingPipe
     Dim lista As GRecordset
    
     
     Dim QueryString As String
     
     QueryString = "SELECT SEQUNIQUEIPID.NEXTVAL as sequ FROM sys.dual"
     
     Set lista = objConnORA.Database.OpenRecordset(QueryString)

     
     lista.MoveLast
     Dim contador
     contador = lista.RecordCount
     
     If contador < 1 Then
       MsgBox "error"
     Else
        
        seq = lista.GFields("sequ")
        
        BuscaSeq = seq
     End If

End Function

Valeu pela ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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