0

我在 OracleXE db 中有 2 个用户:ALICEBOB. 以下步骤序列在我的本地机器上是成功的:

  • 连接为ALICE
  • 创建顶级类型:(create or replace type testtype as object(x number(16)); 编辑:更正错误的名称 foo 误导了 Matthew McPeak)
  • 连接为BOB
  • BOB看到ALICE's 类型:
    • select * from all_types返回行
    • declare x ALICE.testtype; begin null; end;编译

在类型对 不可见的情况下应用于我们的开发数据库产生相同的步骤BOB,即选择不返回该类型的行,PLSQL 块编译失败并PLS-00201: identifier 'ALICE.TESTTYPE' must be declared出现错误。

我需要使类型可见,所以我问:什么可能导致这种差异?(我猜想需要对类型或公共同义词进行授权,但是这个简约的例子证明相反。)用户/会话的某些属性?尽管我希望解决方案是微不足道的,但我在谷歌搜索方面尽了最大努力,现在卡住了。两个数据库都是 Oracle 11g(11.2.0.1.0 开发,11.2.0.2.0 本地)。

谢谢!

4

1 回答 1

0

我假设这不仅仅是您命名您的类型foo但试图将其用作testtype.

如果foo是正确的名称,则为ALICE

grant execute on foo to bob;

Bob 可能EXECUTE ANY TYPE在第一个数据库中具有或类似的系统特权。

于 2015-10-09T16:17:44.350 回答