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

Reply via email to