Rafael, Teu problema era exatamente o que o Chiappa comentou, privilégio vindo de role não vale nada dentro de procedure. A conta SYSTEM tem a role DBA, que dá privilégios diversos à conta, mas não permite que eles sejam usados dentro de procedures ou functions.
Para que a SYSTEM possa usar sua sequence dentro da procedure, você precisa dar grant direto para o usuário. Veja o exemplo: SQL> show user USER is "IVAN" SQL> create sequence seq_teste; Sequence created. SQL> select seq_teste.nextval from dual; NEXTVAL ---------- 1 SQL> create or replace function proc_teste_seq return number is seq_number number; begin select ivan.seq_teste.nextval into seq_number from dual; return seq_number; end; / 2 3 4 5 6 7 Function created. SQL> select proc_teste_seq from dual; PROC_TESTE_SEQ -------------- 2 SQL> conn system Enter password: Connected. SQL> SQL> select ivan.seq_teste.nextval from dual; NEXTVAL ---------- 3 SQL> create or replace function proc_teste_seq return number is seq_number number; begin select ivan.seq_teste.nextval into seq_number from dual; return seq_number; end; / 2 3 4 5 6 7 Warning: Function created with compilation errors. SQL> show error Errors for FUNCTION PROC_TESTE_SEQ: LINE/COL ERROR -------- ----------------------------------------------------------------- 4/2 PL/SQL: SQL Statement ignored 4/14 PL/SQL: ORA-01031: insufficient privileges SQL> grant all ivan.seq_teste to system; grant all ivan.seq_teste to system * ERROR at line 1: ORA-00990: missing or invalid privilege SQL> conn ivan Enter password: Connected. SQL> grant select on seq_teste to system; Grant succeeded. SQL> conn system Enter password: Connected. SQL> create or replace function proc_teste_seq return number is seq_number number; begin select ivan.seq_teste.nextval into seq_number from dual; return seq_number; end; / 2 3 4 5 6 7 Function created. SQL> select proc_teste_seq from dual; PROC_TESTE_SEQ -------------- 4 Abraço On 11 April 2012 14:33, Rafael Vieira <vieira.rafae...@yahoo.com.br> wrote: > Chippa, é exatamente o que o Milton falou, FATURAMENTO é o schema e não o > nome da tabela. > Eu logado como SYSTEM consigo fazer o > Select faturamento.seq_res_fat_anal.nextval from dual, então eu possuo acesso > a sequence correto? Outra coisa estranha, eu fiz o que o Loiro me falou e > funcionou, mas para minha aplicação não vai adiantar de nada, pq esse insert, > ele insere várias linhas e consequentemente irá duplicar a sequence, o que > fiz para resolver foi o seguinte: > > BEGIN > INSERT INTO faturamento.res_fat_anal SELECT > faturamento.seq_res_fat_anal.NEXTVAL, > sub.* > FROM (SELECT sp.parm_amreferenciafaturamento, > loca.greg_id, > loca.uneg_id, > loca.loca_id, > imov.stcm_id, > .... > ..... > AND contaCat.ctcg_vlagua > 0) sub; > COMMIT; > > > Obrigado a todos pela atenção, é isso que faz esse grupo oracle_br um dos > melhores grupos sobre Oracle. > > > ________________________________ > De: Milton Bastos Henriquis Jr. <miltonbas...@gmail.com> > Para: oracle_br@yahoogrupos.com.br > Enviadas: Quarta-feira, 11 de Abril de 2012 13:58 > Assunto: Re: RES: [oracle_br] Erro procedure > > Acredito que o "FATURAMENTO" é o nome do SCHEMA, e não da tabela. > > Pois ele está executando como SYSTEM, então tem que especificar o SCHEMA > tanto da sequence quanto das tabelas! > > > > > > > On Wed, Apr 11, 2012 at 1:44 PM, José Laurindo <jlchia...@yahoo.com.br>wrote: > >> ** >> >> >> Na verdade, a sintaxe de nomedasequence.nextval dentro de um SQL qualquer >> (seja o INSERT ou outro) é Absolutamente, Totalmente, Completamente aceita >> e válida, então não vejo lá necessidade de fazer um acesso extra ao >> database só pra carregar o valor da sequence numa variável, acho que a >> questão aqui deve ser outra... Alguns pontos a ser verificar, Rafael : >> >> a) NÃO é verdade que o usuário SYSTEM por padrão faz tudo, tem acesso á >> tudo, tal conceito de super-usuário que faz TUDO e Qualquer Coisa >> nativamente, bypassando as regras de acesso (como o root no unix), não >> existe no RDBMS Oracle, entçao se vc está usando SYSTEM querendo obter >> isso, pare e cesse, vc não vai conseguir... Via de regra o SYSTEM tem >> diversos privilégios poderosos (como SELECT ANY TABLE, por exemplo) mas NÂO >> FAZ TUDO... Use então um usuário corretamente criado E QUE recebeu os >> privilégios necessários... >> >> b) nós sabemos que dentro de um stored PL/SQL (Procedure, Function, >> Package, Trigger, o que for) os privilégios recebidos implicitamente (via >> ROLE) ** não *** são Ativados por default, então se assegure que o usuário >> recebeu os privilégios (de selecionar as tabelas, de fazer INSERT, de usar >> SEQUENCEs que não lhe pertence, enfim todo o necessário) Diretamente, via >> GRANT >> >> c) o principal aqui que parece apontar para alguma alhada : na cláusula do >> FROM vc escreveu : >> >> FROM .... >> faturamento.conta conta >> ... >> >> ou seja, esse FATURAMENTE parece ser o nome de uma tabela, e na linha de >> valores do INSERT vc escreveu : >> >> faturamento.seq_res_fat_anal.nextval, >> >> ==> isso não faz sentido se FATUTAMENTO for o nome de uma tabela : no >> RDBMS Oracle, as sequences são **** INDEPENDENTES **** das tabelas, então >> nomedatabela.nomedasequence Não Faz o Menor sentido .... >> >> []s >> >> Chiappa >> --- Em oracle_br@yahoogrupos.com.br, "Loiro" <loiro_2001@...> escreveu >> >> > >> > Broder, >> > >> > Boa tarde! >> > >> > Mande o erro para agregar na pergunta e na resolução do >> > problema. >> > >> > >> > >> > Quanto a solução um dica que dou é coloque o resultado da >> > sequence em uma variável e coloque-a dentro do comando. >> > >> > >> > >> > De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] >> Em >> > nome de vieira.rafael44 >> > Enviada em: quarta-feira, 11 de abril de 2012 12:01 >> > Para: oracle_br@yahoogrupos.com.br >> > Assunto: [oracle_br] Erro procedure >> > >> > >> > >> > >> > >> > Pessoal, crio a procedure, mas dá erro na segunda linha do INSERT >> > onde possui o nextval da sequence, dizendo que nao tenho privilegios >> > suficientes, estou Logado com usuário SYSTEM ( isso eh banco de teste, >> por >> > isso estou conectado com esse usuario). >> > >> > ALguem pode ajudar? >> > >> > CREATE OR REPLACE PROCEDURE SP1_GERAR_RES_FAT_ANAL >> > IS >> > >> > BEGIN >> > >> > -- Sequência = 100 >> > INSERT INTO faturamento.res_fat_anal SELECT >> > faturamento.seq_res_fat_anal.nextval, >> > sp.parm_amreferenciafaturamento, >> > loca.greg_id, >> > loca.uneg_id, >> > loca.loca_id, >> > imov.stcm_id, >> > imov.qdra_id, >> > imov.iper_id, >> > imov.last_id, >> > imov.lest_id, >> > contaCat.catg_id, >> > conta.imov_id, >> > NULL AS clie_id, >> > conta.cnta_id, >> > NULL AS dbac_id, >> > NULL AS crar_id, >> > NULL AS gpag_id, >> > NULL AS gdev_id, >> > 1 AS lctp_id, >> > 1 AS lcit_id, >> > NULL AS lict_id, >> > 100 AS rfaa_nnsequenciatipolancamento, >> > 0 AS rfaa_nnseqitemtplanc, >> > sysdate AS rfaa_tmultimaalteracao, >> > contaCat.ctcg_vlagua AS rfaa_vlitemfaturamento >> > FROM >> > faturamento.conta conta >> > INNER JOIN cadastro.imovel imov ON conta.imov_id = imov.imov_id >> > INNER JOIN faturamento.conta_categoria contaCat ON conta.cnta_id = >> > contaCat.cnta_id >> > INNER JOIN cadastro.localidade loca ON conta.loca_id = loca.loca_id >> > INNER JOIN cadastro.sistema_parametros sp ON 1 = 1 >> > WHERE >> > conta.cnta_amreferenciaconta = sp.parm_amreferenciafaturamento >> > AND( >> > conta.dcst_idatual = 0 >> > OR conta.dcst_idanterior = 0 >> > ) >> > AND contaCat.ctcg_vlagua > 0; >> > >> > COMMIT; >> > >> > END; >> > >> > >> > >> > >> > >> > >> > _____ >> > >> > avast! Antivirus <http://www.avast.com> : Inbound message clean. >> > >> > Virus Database (VPS): 120411-0, 11/04/2012 >> > Tested on: 11/04/2012 12:04:41 >> > avast! - copyright (c) 1988-2012 AVAST Software. >> > >> > >> > >> > >> > >> > [As partes desta mensagem que não continham texto foram removidas] >> > >> >> >> > > > > -- > Att, > > > [As partes desta mensagem que não continham texto foram removidas] > > > > ------------------------------------ > > -------------------------------------------------------------------------------------------------------------------------- >>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >>responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > -------------------------------------------------------------------------------------------------------------------------- >>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >>http://www.oraclebr.com.br/ > ------------------------------------------------------------------------------------------------------------------------ > Links do Yahoo! Grupos > > [As partes desta mensagem que não continham texto foram removidas] > > > > ------------------------------------ > > -------------------------------------------------------------------------------------------------------------------------- >>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >>responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > -------------------------------------------------------------------------------------------------------------------------- >>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >>http://www.oraclebr.com.br/ > ------------------------------------------------------------------------------------------------------------------------ > Links do Yahoo! Grupos > > -- Ivan Ricardo Schuster OCP 10g/11g OCE RAC 10g/Linux