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

Grant permission to stored procedure in sql script

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

    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 语句一起使用时那样吗?

我想您在 END 后面少了一个斜线;

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

GRANT EXECUTE ON PROCEDURE_NAME TO ROLE_NAME;

在 sqlplus 中,对于正常的 sql 语句,如 selectinsertdelete DDL(ALTER,CREATE TABLE 等,要么/ 或查询末尾的 ; 可以正常工作。

但是,对于 PL/SQL 代码,例如包含 CREATE FUNCTIONCREATE PROCEDURECREATE PACKAGECREATE TYPE 或匿名块(DECLARE/BEGIN/END), 末尾的分号是不够的。我们需要一个/来执行命令。

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

oracle SQL plus how to end command in SQL file?