在sql脚本中为存储过程授予权限

时间:2018-02-15 10:03:19

标签: oracle plsqldeveloper

我有一个.sql文件,其中包含创建过程语句,后跟一个grant语句,如下所示。

    create or replace
    PROCEDURE PROCEDURE_NAME()
    AS 
      BEGIN
      .....................
      END;

GRANT EXECUTE ON PROCEDURE_NAME TO ROLE_NAME;

如果我删除授权声明,一切正常。但是使用grant语句会出现以下错误。

Error(23,1): PLS-00103: Encountered the symbol "GRANT" 

我在这里缺少什么?可以将grant语句包含在脚本中,就像我们在create语句中使用它时一样吗?

2 个答案:

答案 0 :(得分:5)

我猜错了你在END后面的斜线;

create or replace
    PROCEDURE PROCEDURE_NAME()
    AS 
      BEGIN
      .....................
      END;
/                --> this

GRANT EXECUTE ON PROCEDURE_NAME TO ROLE_NAME;

答案 1 :(得分:1)

在sqlplus中,对于普通的sql语句,例如selectinsertdelete DDL(ALTER,CREATE TABLE等,/或{{1在查询结束时,工作正常。

但是,对于PL / SQL代码,例如包含;CREATE FUNCTIONCREATE PROCEDURECREATE PACKAGE或匿名阻止(CREATE TYPE)的代码,最后用分号是不够的。我们需要DECLARE/BEGIN/END来执行命令。

因此,在/之后添加/,它应该可以正常工作。

oracle SQL plus how to end command in SQL file?