我使用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
出现此错误的原因是什么?
答案 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
授予权限也是不寻常的,通常只会对普通用户和角色进行授权。