为什么一个用户创建的 Oracle 类型对另一个用户不可见?
Why Oracle type created by one user is not visible by another user?
我在 OracleXE 数据库中有 2 个用户:ALICE
和 BOB
。以下步骤在我的本地机器上是成功的:
- 连接为
ALICE
- 创建顶级类型:
create or replace type testtype as object(x number(16));
(编辑:更正误导 Matthew McPeak 的错误名称 foo)
- 连接为
BOB
BOB
看到 ALICE
的类型:
select * from all_types
return行
declare x ALICE.testtype; begin null; end;
编译
在类型对 BOB
不可见的情况下,将相同的步骤应用于我们的开发数据库,即 select 没有 return 类型的行,PLSQL 块编译失败并显示PLS-00201: identifier 'ALICE.TESTTYPE' must be declared
错误。
我需要使类型可见,所以我问:可能导致这种差异的原因是什么?(我猜想需要对类型或 public 同义词进行授权,然而,这个简单的例子证明了相反的情况。) user/session 中的 属性?尽管我希望解决方案是微不足道的,但我在谷歌搜索上尽了最大努力,但现在陷入困境。两个数据库都是 Oracle 11g(11.2.0.1.0 dev,11.2.0.2.0 local)。
谢谢!
我假设这不仅仅是您将类型命名为 foo
但试图将其用作 testtype
.
的事实
如果 foo
是正确的名称,那么,如 ALICE
:
grant execute on foo to bob;
Bob 在第一个数据库中可能具有 EXECUTE ANY TYPE
或类似的系统权限。
我在 OracleXE 数据库中有 2 个用户:ALICE
和 BOB
。以下步骤在我的本地机器上是成功的:
- 连接为
ALICE
- 创建顶级类型:
create or replace type testtype as object(x number(16));
(编辑:更正误导 Matthew McPeak 的错误名称 foo) - 连接为
BOB
BOB
看到ALICE
的类型:select * from all_types
return行declare x ALICE.testtype; begin null; end;
编译
在类型对 BOB
不可见的情况下,将相同的步骤应用于我们的开发数据库,即 select 没有 return 类型的行,PLSQL 块编译失败并显示PLS-00201: identifier 'ALICE.TESTTYPE' must be declared
错误。
我需要使类型可见,所以我问:可能导致这种差异的原因是什么?(我猜想需要对类型或 public 同义词进行授权,然而,这个简单的例子证明了相反的情况。) user/session 中的 属性?尽管我希望解决方案是微不足道的,但我在谷歌搜索上尽了最大努力,但现在陷入困境。两个数据库都是 Oracle 11g(11.2.0.1.0 dev,11.2.0.2.0 local)。
谢谢!
我假设这不仅仅是您将类型命名为 foo
但试图将其用作 testtype
.
如果 foo
是正确的名称,那么,如 ALICE
:
grant execute on foo to bob;
Bob 在第一个数据库中可能具有 EXECUTE ANY TYPE
或类似的系统权限。