0

我正在使用带有 System 作为用户名的 Oracle。我创建了一个名为 STUDY 的数据库。我使用以下 SQL 语句创建了一个名为 LIB 的表:

create table lib(
book varchar(20)
);

我使用以下 SQL 语句创建了一个过程名称 SUB:

create or replace procedure SUB( sbook IN VARCHAR)
as
begin
insert into LIB values(sbook);
end;
/

我还通过以下 SQL 语句授予了 EXECUTE 权限:

grant EXECUTE on SUB to system;

现在,当我尝试使用以下 SQL 语句执行 SUB 过程时:

execute STUDY.SUB ('mybook');

我收到以下错误:

ORA-00900: invalid SQL statement

这个错误的原因是什么?

4

2 回答 2

0

执行为

begin
execute STUDY.SUB ('mybook');
end;
于 2013-04-19T20:16:31.477 回答
0

首先,作为帐户做绝对最小值SYSTEM,并且不要在该架构下创建对象(或任何其他内置架构,尤其是SYS)。

如果您运行所有这些命令,SYSTEM那么您在架构SUB下创建过程SYSTEM,而不是在STUDY架构下。您还没有创建STUDY 数据库,这不是 Oralce 做事的方式;您已经通过创建用户创建了架构。(至少,我认为这就是你所做的,你有可能在一个名为 的数据库中完成所有这些STUDY,但我对此表示怀疑)。

你可能应该做的是:

connect study/password
create table lib ( ... );
create or replace peocedure ( ... );
/
execute sub( ... );

如果您正在尝试授予,那么您需要创建第二个用户,比如说USER2,并且仍然是STUDY

grant execute on sub to user2;

然后以第二个用户身份连接并执行该过程:

connect user2/password
execute study.sub ( ... );

甚至授予 privs 也是不寻常的SYSTEM,通常只会对普通用户和角色进行。

于 2013-04-19T21:12:53.073 回答