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

在Oracle 11g Express中执行显示错误的过程,oracle,oracle11g,Oracle,Oracle11g,我使用Oracle系统作为用户名。我已经创建了一个名为STUDY的数据库。 我使用以下SQL语句创建了一个名为LIB的表: create table lib( book varchar(20) ); grant EXECUTE on SUB to system; execute STUDY.SUB ('mybook'); 我已使用以下SQL语句创建了一个过程名SUB: create or replace procedure SUB( sbook IN VARCHAR) as begin i

我使用Oracle系统作为用户名。我已经创建了一个名为STUDY的数据库。 我使用以下SQL语句创建了一个名为LIB的表:

create table lib(
book varchar(20)
);
grant EXECUTE on SUB to system;
execute STUDY.SUB ('mybook');
我已使用以下SQL语句创建了一个过程名SUB:

create or replace procedure SUB( sbook IN VARCHAR)
as
begin
insert into LIB values(sbook);
end;
/
我还通过以下SQL语句授予执行权限:

create table lib(
book varchar(20)
);
grant EXECUTE on SUB to system;
execute STUDY.SUB ('mybook');
现在,当我尝试使用以下SQL语句执行子过程时:

create table lib(
book varchar(20)
);
grant EXECUTE on SUB to system;
execute STUDY.SUB ('mybook');
我得到以下错误:

ORA-00900: invalid SQL statement
此错误的原因是什么?

按如下方式执行

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

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

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

您可能应该做的是:

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 ( ... );

甚至向
系统
授予priv也是不寻常的,通常这只会对普通用户和角色执行。

execute
是一个SQL*Plus和SQL Develper命令,它封装了一个简单的
开始。。。为方便起见,在单个命令周围结束
。它不是您可以从PL/SQL块内部调用的东西。不要与动态SQL的“立即执行”混淆。。。