我在OracleXE db中有2个用户:ALICE
和BOB
。以下一系列步骤在我的本地机器上成功完成:
ALICE
create or replace type testtype as object(x number(16));
(编辑:错误名称foo的更正误导了Matthew McPeak) BOB
BOB
查看ALICE
的类型:
select * from all_types
返回行declare x ALICE.testtype; begin null; end;
编译在类型对BOB
不可见的情况下应用于我们的开发数据库产量的相同步骤,即select不返回类型的行,PLSQL块编译失败并出现PLS-00201: identifier 'ALICE.TESTTYPE' must be declared
错误。
我需要让类型可见,所以我问:可能导致这种差异的原因是什么?(我猜测需要对类型或公共同义词进行授权,但是这个简约的例子证明了相反的情况。)用户/会话的一些属性?我尽力使用谷歌搜索,但现在我被困住了,但我希望解决方案是微不足道的。两个数据库都是Oracle 11g(11.2.0.1.0 dev,11.2.0.2.0 local)。
谢谢!
答案 0 :(得分:0)
我假设这不仅仅是您为类型foo
命名,而是尝试将其用作testtype
。
如果foo
是正确的名称,则为ALICE
:
grant execute on foo to bob;
Bob可能在第一个数据库中具有EXECUTE ANY TYPE
或类似的系统特权。