我有一个.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
语句中使用它时一样吗?
答案 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语句,例如select
,insert
,delete
DDL(ALTER,CREATE TABLE
等,/
或{{1在查询结束时,工作正常。
但是,对于PL / SQL代码,例如包含;
,CREATE FUNCTION
,CREATE PROCEDURE
,CREATE PACKAGE
或匿名阻止(CREATE TYPE
)的代码,最后用分号是不够的。我们需要DECLARE/BEGIN/END
来执行命令。
因此,在/
之后添加/
,它应该可以正常工作。