ThaisN 0 Denunciar post Postado Dezembro 11, 2009 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
Motta 645 Denunciar post Postado Dezembro 11, 2009 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
ThaisN 0 Denunciar post Postado Dezembro 14, 2009 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
Motta 645 Denunciar post Postado Dezembro 14, 2009 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
ThaisN 0 Denunciar post Postado Dezembro 14, 2009 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
Motta 645 Denunciar post Postado Dezembro 14, 2009 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
ThaisN 0 Denunciar post Postado Dezembro 14, 2009 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
Motta 645 Denunciar post Postado Dezembro 14, 2009 Procure na tabela dba_synonimns se existir está lá. Compartilhar este post Link para o post Compartilhar em outros sites
ThaisN 0 Denunciar post Postado Dezembro 14, 2009 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
Motta 645 Denunciar post Postado Dezembro 14, 2009 Logado como sys a query : select sysdate from dual funciona ? Compartilhar este post Link para o post Compartilhar em outros sites
ThaisN 0 Denunciar post Postado Dezembro 14, 2009 Sim, no SQL Developer fuciona inclusive com o usuario que me interessa que se chama GIA... Compartilhar este post Link para o post Compartilhar em outros sites
ThaisN 0 Denunciar post Postado Dezembro 14, 2009 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
Motta 645 Denunciar post Postado Dezembro 14, 2009 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
ThaisN 0 Denunciar post Postado Dezembro 14, 2009 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