在Oracle 11g Express中执行过程显示错误

时间:2013-04-19 20:11:44

标签: oracle oracle11g

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

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

出现此错误的原因是什么?

2 个答案:

答案 0 :(得分:0)

执行

begin
execute STUDY.SUB ('mybook');
end;

答案 1 :(得分: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 ( ... );

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