授予创建表INSIDE oracle sql过程的特权

时间:2018-12-03 17:21:11

标签: sql oracle procedure privileges

我正在尝试在oracle上的过程内创建表。但我不断 ORA-01031:特权不足。我以为我的用户可能需要这样做的特权?

这是过程代码:

CREATE OR REPLACE PROCEDURE AjouterCol(TAB VARCHAR2, NOM VARCHAR2) IS 
REQ VARCHAR2(200);
RES VARCHAR2(200);
RES1 VARCHAR2(200);
NAME VARCHAR2(200);
BEGIN
  NAME:=TAB || '_' || NOM;

  RES:='CREATE TABLE '||NAME||' AS SELECT * FROM '|| TAB || ' WHERE Col9 = ''PARIS'' AND SOUNDEX(Col9) = SOUNDEX(''PARIS'')' ;
  EXECUTE IMMEDIATE RES;

  RES1:='ALTER TABLE '|| NAME ||' ADD MAGASIN VARCHAR2(5)';
  EXECUTE IMMEDIATE RES1;

  REQ:='UPDATE '|| NAME ||' SET MAGASIN = '''|| NOM ||''' WHERE MAGASIN IS NULL' ;
  EXECUTE IMMEDIATE REQ;

  END;
  /

有什么需要帮助的吗?谢谢。

2 个答案:

答案 0 :(得分:1)

如果用户(执行该脚本)通过角色获得了CREATE TABLE特权,则可以创建表。但是,这些特权在命名的PL / SQL过程中不起作用-您必须直接将特权授予用户(即不通过角色)。

答案 1 :(得分:0)

因此,谢谢大家的回答。通过将AUTHID CURRENT_USER添加到proc声明中,我解决了该问题。再次谢谢你。