Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 向sql脚本中的存储过程授予权限_Oracle_Plsqldeveloper - Fatal编程技术网

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

Oracle 向sql脚本中的存储过程授予权限,oracle,plsqldeveloper,Oracle,Plsqldeveloper,我有一个.sql文件,其中包含create procedure语句,后跟grant语句,如下所示 create or replace PROCEDURE PROCEDURE_NAME() AS BEGIN ..................... END; GRANT EXECUTE ON PROCEDURE_NAME TO ROLE_NAME; 如果我删除授权声明,一切正常。然而,对于grant语句,它给出了以下错误 Erro

我有一个
.sql
文件,其中包含create procedure语句,后跟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
语句一起使用时一样?

我想,您在结尾后面缺少了一个斜杠

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

GRANT EXECUTE ON PROCEDURE_NAME TO ROLE_NAME;

我猜,你错过了一条斜线,在结尾后面

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

GRANT EXECUTE ON PROCEDURE_NAME TO ROLE_NAME;

在sqlplus中,对于正常的sql语句,如
select
insert
delete
DDL(
ALTER,CREATE TABLE
等),查询末尾的
/
都可以正常工作

但是,对于PL/SQL代码,例如包含
CREATE FUNCTION
CREATE PROCEDURE
CREATE PACKAGE
CREATE TYPE
、或匿名块(
DECLARE/BEGIN/END
)的代码,末尾的分号是不够的。我们需要
//code>来执行命令

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


在sqlplus中,对于正常的sql语句,如
选择
插入
删除
DDL(
更改,创建表
等,查询末尾的
/
都可以正常工作

但是,对于PL/SQL代码,例如包含
CREATE FUNCTION
CREATE PROCEDURE
CREATE PACKAGE
CREATE TYPE
、或匿名块(
DECLARE/BEGIN/END
)的代码,末尾的分号是不够的。我们需要
//code>来执行命令

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