Dzyann Asked: 2014-06-18 12:19:41 +0800 CST2014-06-18 12:19:41 +0800 CST 2014-06-18 12:19:41 +0800 CST 如何从包内的另一个模式中引用表? 772 我正在使用 TOAD 在我拥有的架构中创建一个包。我的包使用另一个模式的表。 该包有一个使用游标的过程。创建包时出现编译错误: 正文 509 30 PL/SQL: ORA-00904: : 无效标识符 该错误指向光标的选择正在使用的表,并且它位于另一个模式中。 如果我直接在 TOAD 中运行查询,它可以完美运行,我是 Oracle 的新手,我不明白为什么会出现这个错误。为什么我会收到此错误? oracle plsql 1 个回答 Voted Best Answer miracle173 2014-06-19T19:49:42+08:002014-06-19T19:49:42+08:00 来自“Oracle Database Advanced Application Developer's Guide, 11g Release 2 (11.2), E41502-05”中的“6 Coding PL/SQL Subprograms and Packages”部分 要创建没有错误(成功编译子程序或包)需要以下额外权限: - 必须明确授予子程序或包的所有者对代码主体中引用的所有对象的必要对象权限。 - 所有者无法通过角色获得所需的权限。 您必须已将此表的选择权限授予拥有该包的架构。重要的是,将此权限直接授予包所有者,而不是使用角色间接授予。使用角色直接由 Toad 选择表就足够了,但如果您想在包中选择表就不够了。
来自“Oracle Database Advanced Application Developer's Guide, 11g Release 2 (11.2), E41502-05”中的“6 Coding PL/SQL Subprograms and Packages”部分
您必须已将此表的选择权限授予拥有该包的架构。重要的是,将此权限直接授予包所有者,而不是使用角色间接授予。使用角色直接由 Toad 选择表就足够了,但如果您想在包中选择表就不够了。