Ir para conteúdo

Arquivado

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

D&G

Dbms_sql

Recommended Posts

Olá pessoal, executar o seguinte procedure:PROCEDURE Creacaois--Cursoresc_create integer;--Variaveisv_insert varchar2(50);v_create long;v_return number;BEGIN c_create := dbms_sql.open_cursor; v_create := 'create table teste (id number)'; dbms_sql.parse(c_create,v_create, dbms_sql.native); v_return := dbms_sql.execute(c_create); dbms_output.put_line('EXEC'); dbms_output.put_line (v_return); END; -- ProcedureErros:ORA-01031: insufficient privilegesORA-06512: at line 7PS. Detalhe, segundo a minha Dba eu estou com usuario que tem todos os privilegios. Outra coisa todos os outros comando DDL passam, menos o create.Por favor, se alguem sabe como resolver, me ajudem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou algum privilegio , tipo executar procedure, criar tables etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom,

 

No seu caso, realmente está faltando algum GRANT a conceder ao usuário que está executando a procedure. Seja de CREATE TABLE, EXECUTE, QUOTA em tablespaces e etc...

 

Mas, existe um modo mais fácil de fazer isso, veja:

 

SQL*Plus: Release 10.2.0.1.0 - Production on --- Dez 8 10:56:06 2006Copyright (c) 1982, 2005, Oracle.  All rights reserved.SQL> conn systemInforme a senha:Conectado. SQL> create or replace procedure criacao  2  is  3  txtNome varchar2(100);  4  begin  5	 execute immediate 'CREATE TABLE x (a varchar2(10))';  6  end;  7  /Procedimento criado.SQL> exec criacao();Procedimento PL/SQL concluÝdo com sucesso.SQL> select * from x;nÒo hß linhas selecionadasSQL> desc X Nome									  Nulo?	Tipo ----------------------------------------- -------- ---------------------------- A												  VARCHAR2(10)SQL>

Eu executei o exemplo com o usuário SYSTEM, para seu usuário poderá conceder os grants que mencionei acima ou apenas agregar as regras (ROLE) CONNECT e RESOURCE ao usuário.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou algum privilegio , tipo executar procedure, criar tables etc.

Pois eh pessoal, tudo leva a crer que falta algum GRANT, porem qdo eu executo so o create table fora da procedure, na mesma sessão do oracle, ele passa normalmente e mais..... qdo eu troco o comando create por alter, drop ou truncate table e executo a procedure ela é executada com sucesso.... !!!Pensei en falta de GRANT para o Create table, mas consigo fazer por fora, pensei entao em falta de GRANT para a execução da procedure, mas se troco o comando ela roda com sucesso. Ja pensei que pode ser alguma coisa no proprio pacote DBMS_sql.Que acham?????

Compartilhar este post


Link para o post
Compartilhar em outros sites

... mas se troco o comando ela roda com sucesso. ...

O que você quis dizer com isto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tambén não entendi a troca de comando, pois quando se concede um grant de CREATE TABLE ao usuário, ele automaticamente, já tem permissão para ALTER TABLE e DROP TABLE para tabela que criar. O CREATE TABLE é como se fosse um conjunto de privilegios para tabela.

 

E como assim, alterar o comando ele executa normal? http://forum.imasters.com.br/public/style_emoticons/default/searchbeforeposting.gif

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tambén não entendi a troca de comando, pois quando se concede um grant de CREATE TABLE ao usuário, ele automaticamente, já tem permissão para ALTER TABLE e DROP TABLE para tabela que criar. O CREATE TABLE é como se fosse um conjunto de privilegios para tabela. E como assim, alterar o comando ele executa normal? http://forum.imasters.com.br/public/style_emoticons/default/searchbeforeposting.gif Abraços, http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif

vejam se eu criar a table por fora da procedurecreate table teste (id number)---Table Criada ---Depois eu vou na procedure e so troco o mando create table, por Drop ou truncate table, na linha de codigo a baixo.......v_create := 'drop table teste';......A procedure é executada normalmente, sem erros de privilegios.ou seja, so nao funciona com o create, entendi ??DG :-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falta o grant de drop table , creio , o grant de create é diferente do do drop.

Já tentou criar via procedure ou dropar fora dela ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O grant DROP TABLE e ALTER TABLE já fazem parte do CREATE TABLE.

 

Vou fazer desde o início e todos os comandos necessarios para executar. veja:

 

SQL*Plus: Release 10.2.0.1.0 - Production on Seg Dez 11 14:32:16 2006Copyright (c) 1982, 2005, Oracle.  All rights reserved.SQL> conn systemInforme a senha:Conectado.SQL> create user RODRIGOALMEIDA  2  identified by imasters  3  default tablespace USERS  4  temporary tablespace TEMP;Usuário criado.SQL> grant create session, create table to RODRIGOALMEIDA;Concessão bem-sucedida.SQL> alter user RODRIGOALMEIDA quota 10M on USERS;Usuário alterado.SQL> grant create procedure to RODRIGOALMEIDA;Concessão bem-sucedida.SQL> disconnectDesconectado de Oracle Database 10g Express Edition Release 10.2.0.1.0 - ProductionSQL> connect RODRIGOALMEIDA/IMASTERSConectado.SQL> show userUSER É "RODRIGOALMEIDA"SQL> host notepad teste_proc.sqlSQL> get teste_proc  1  CREATE OR REPLACE PROCEDURE Creacao  2  is  3  --Cursores  4  c_create integer;  5  --Variaveis  6  v_insert varchar2(50);  7  v_create long;  8  v_return number;  9  BEGIN 10  c_create := dbms_sql.open_cursor; 11  v_create := 'create table teste (id number)'; 12  dbms_sql.parse(c_create,v_create, dbms_sql.native); 13  v_return := dbms_sql.execute(c_create); 14  dbms_output.put_line('EXEC'); 15  dbms_output.put_line (v_return); 16* END; 17  /Procedimento criado.SQL> exec creacao();Procedimento PL/SQL concluído com sucesso.SQL> select * from teste;não há linhas selecionadasSQL> desc teste; Nome									  Nulo?	Tipo ----------------------------------------- -------- ---------------------------- ID												 NUMBERSQL> drop table TESTE;Tabela eliminada.SQL> select * from teste;select * from teste			  *ERRO na linha 1:ORA-00942: a tabela ou view não existeSQL> create table teste (id number);Tabela criada.SQL> select * from teste;não há linhas selecionadasSQL> drop table teste;Tabela eliminada.SQL> exec creacao();Procedimento PL/SQL concluído com sucesso.SQL> select * from teste;não há linhas selecionadasSQL> insert into TESTE values (001);1 linha criada.SQL> commit;Commit concluído.SQL> select * from teste;		ID----------		 1SQL>
Passo-a-passo:

 

1 - Criei um usuário chamado RODRIGOALMEIDA.

2 - Concedi permissão de criação de sessão e criação de tabelas.

3 - Alterei sua quota na tablespace USERS para 10MB.

4 - Concedi permissão de CRIAÇÃO DE TABELAS

5 - Criei a procedure que está postada no Fórum, não mudei nenhum código.

6 - Executei a procedure, com sucesso.

7 - Verifiquei que a tabela TESTE foi criada.

8 - Exclui a tabela, por comando, sem a procedure.

9 - Verifique se a tabela existe, sem sucesso.

10 - Criei a tabela FORA da procedure, com sucesso.

11 - Idem 7

12 - Idem 8

13 - Idem 6

14 - Idem 7

15 - Inseri linhas para teste. PRONTO! Sem segredos!

 

Verifica se todo esse processo está sendo feitos com OBJETOS do seu USUÁRIO ou SCHEMA!!! Se tiver outros usuários, terá que ter permissões.

 

O SELECT abaixo também pode lhe ajudar a fornecer mais informações sobre suas permissões:

 

SQL> select * from user_sys_privs;USERNAME					   PRIVILEGE								ADM------------------------------ ---------------------------------------- ---RODRIGOALMEIDA				 CREATE PROCEDURE						 NORODRIGOALMEIDA				 CREATE TABLE							 NORODRIGOALMEIDA				 CREATE SESSION						   NO
Caso tenha mais problemas, poste aqui.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oie Rodrigo,Fiz o que você receitou, ate fiz pelo Sql Plus e veja o resultado:Conectado a:Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - ProductionWith the Partitioning, OLAP and Data Mining Scoring Engine optionsSQL> SHOW USER;USER é "TI_DENISE"SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---TI_DENISE UNLIMITED TABLESPACE NOSQL> EXEC CREACAO;BEGIN CREACAO; END;*ERRO na linha 1:ORA-01031: insufficient privilegesORA-06512: at "SYS.DBMS_SYS_SQL", line 906ORA-06512: at "SYS.DBMS_SQL", line 39ORA-06512: at "TI_DENISE.CREACAO", line 12qual o erro amigo???AbraçosDG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Denise,

 

Seu usuário não tem todas as permissões que precisa, fale com o seu DBA para fornecer as seguintes permissões:

 

CREATE TABLE

CREATE PROCEDURE

 

O comando está no último post que escrevi, só acompanhar passo a passo.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, Vamos por parte, o usuario Ti_denise, ja está com estes privilegios, tanto que eu consigo CRIAR a PROCEDURE por ele e consigo criar tb a TABLE por ele, o que eu NÃO estou consiguindo é criar a tabela por dentro da procedure, pois qdo eu executo dá erro. Veja:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Conectado a:Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - ProductionWith the Partitioning, OLAP and Data Mining Scoring Engine optionsSQL> show userUSER é "TI_DENISE"SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---TI_DENISE UNLIMITED TABLESPACE NO 1 create PROCEDURE Creacao 2 is 3 c_create integer; 4 v_insert varchar2(50); 5 v_create long; 6 v_return number; 7 BEGIN 8 c_create := dbms_sql.open_cursor; 9 v_create := 'create table teste (id number)'; 10 dbms_sql.parse(c_create,v_create, dbms_sql.native); 11 v_return := dbms_sql.execute(c_create); 12 dbms_output.put_line('EXEC'); 13 dbms_output.put_line (v_return); 14* END; 15 /Procedimento criado.SQL> EXEC CREACAO;BEGIN CREACAO; END;*ERRO na linha 1:ORA-01031: insufficient privilegesORA-06512: at "SYS.DBMS_SYS_SQL", line 906ORA-06512: at "SYS.DBMS_SQL", line 39ORA-06512: at "TI_DENISE.CREACAO", line 10ORA-06512: at line 1SQL> create table teste (id number);Tabela criada.SQL> SELECT * FROM teste 2 /não há linhas selecionadas----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Passo a passo1 - Criei a procedure , a mesma do codigo (com sucesso) - logo o usuario tem permissao de criação de procedure2 - Executei a procedure, SEM sucesso (ERRO).3 - Criei a Table teste fora da procedure (com sucesso) - logo o usuario tem permissao de criação de tabela.entao, como pode ser observado, o erro ocorre qdo executo o create por dentro da procedure, usando o DBMS_SQL.PS. Volto a perguntar, pode ser alguma coisa com o pacote DBMS_SQL?Abraços amigosDG

Compartilhar este post


Link para o post
Compartilhar em outros sites

O pacote DBMS_SQL é de uso público dentro do Oracle. Tem outra coisa pendente no seu ambiente. Seguinte, check outras informações:

 

SQL> select * from user_role_privs;SQL> select * from user_role_privs;USERNAME					   GRANTED_ROLE				   ADM DEF OS_------------------------------ ------------------------------ --- --- ---PEC_PROD					   CONNECT						NO  YES NOPEC_PROD					   RESOURCE					   NO  YES NOSQL> select * from user_sys_privs;USERNAME					   PRIVILEGE								ADM------------------------------ ---------------------------------------- ---PEC_PROD					   CREATE VIEW							  NOPEC_PROD					   CREATE TABLE							 NOPEC_PROD					   CREATE SESSION						   NOPEC_PROD					   CREATE SYNONYM						   NOPEC_PROD					   CREATE SNAPSHOT						  NOPEC_PROD					   CREATE INDEXTYPE						 NOPEC_PROD					   CREATE PROCEDURE						 NOPEC_PROD					   UNLIMITED TABLESPACE					 NO

Último caso, mande ela fornecer um GRANT explicíto no pacote DBMS_SQL. (Isso é besteira, mais as vezes, alteram alguma coisa!).

 

SQL> grant execute on DBMS_SQL to PEC;

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema resolvidos amigos.Era o seguinte:Mesmo o meu usuario ter os privilegios de CONNECT e RESOURCE e eu ter tentando ate mesmo com usuario com provilegios de DBA, o erro acontecia pq o pacote DBMS_SQL para funcionar, precisa que seja dado a premissões de Create Table explicitamente ao usuario, pois o pacote nao enxerga as permissões para as roles citadas a cima. Por este motivo eu conseguia criar a table por fora e nao conseguia criar por dentro da procedure usando o pacote.Encontrei esta explicação no Oracle MetaLink.Agradço a você e aos demais membro que me ajudaram.Grande AbraçoDG

Compartilhar este post


Link para o post
Compartilhar em outros sites

+ 1 BUG na lista do 10G.

 

Se ele não enxerga os grants concedidos por ROLE, então pra quê serve ROLE!!! Fico indignado... hehehehhe na versão 8 e 9 não acontecia nada diss0.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_w00t.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Pior é que nao amigo.eu testei no 8 e 9, e acontee a mesma coisa, agora e faço uma outra pergunta, pq eles nao consertam logo isso ne?AbraçosDG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou ser obrigado a concordar contigo!!!

 

Testei numa versão 9i 9.2.0.4 e aconteceu o mesmo problema! Depois do GRANT explícito de CREATE TABLE ao usuário a procedure funcionou.

 

AFFFFFFF!!! Cada coisa.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

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.