在Oracle 11g Express中执行显示错误的过程
我使用Oracle系统作为用户名。我已经创建了一个名为STUDY的数据库。 我使用以下SQL语句创建了一个名为LIB的表:在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
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的“立即执行”混淆。。。