lunes, 13 de abril de 2009

Crear Tablas en un Store procedure PL/SQL - ORA-01031: insufficient privileges

Bueno... aquí hay un poblemita, que si bien es muy facil de solucionar es "raro" que luego de tantas versiones siga pasando.... :D

el tema es el siguiente.. Crear un tabla dentro de un Porcedimiento.
si ejecutamos CREATE TABLE pepe (....... desde linea de comando funciona perfectamente...pero si lo hacemos :

script_crear := 'CREATE TABLE PEPE (NUM NUMBER ,DATOS VARCHAR2(50))';
EXECUTE IMMEDIATE script_crear;

Nos devuleve el error:
ORA-01031: insufficient privileges

Solucion: Dar los permisos de forma directa, es decir.

grant create table to usuario.


Por que pasa esto?? bueno el "problemita" se da porque los ROLES no son tomados en los procedimientos PLSQL, es decir si tenemos un permiso obtenido a través de un ROL, este permiso no lo tendremos dentro de los procedimientos o funciones PL/SQL, mmmm bueno, en si... si lo ejecutamos en un bloque anonimo funcionaria pero.. más facil es darle el permiso de forma directa y problema solucionado.

Como siempre hay un buen link, con comentarios de gente que sabe :D

http://forums.oracle.com

1 comentario:

  1. Excelente aportación, sólo aclarar que el GRANT también debe ser introducido en un bloque de texto.

    ResponderEliminar