【发布时间】:2013-11-06 14:15:58
【问题描述】:
我确实尝试在 oracle 10g 数据库中创建一个存储过程,它从 dba_segments 中选择数据并插入另一个表(即 table_space)。
当我运行上面它显示以下两个错误:
- 05 行 |执行 | PL/SQL:忽略 SQL 语句
- 第 12 行 |执行 | PL/SQL: ORA00942: 表或视图不存在
但是,如果单独执行INSERT 语句,它会填充table_space 表。
【问题讨论】:
-
dba_segments 是一个系统表。它存在,但您无权访问它。与您的 DBA 讨论获得必要的许可。
-
@Joe 我确实对
dba_segments拥有SELECT权限,这就是INSERT语句在单独执行时起作用的原因。我不明白为什么这个错误只出现在程序的情况下! -
@Satyendra - 您在
dba_segments上的权限是直接授予您还是通过角色授予? Roles are disabled in named blocks with definer's rights. -
@AlexPoole 感谢您的链接! cagcowboy(接受一个)的回答说,程序的所有者也必须拥有桌子上的权利。但是,就我而言,这两种情况的“所有者”都是相同的。
-
@Satyendra - 接受的答案还强调权利必须是直接的,而不是通过角色,这就是我的链接所说的。文森特的回答显示了如何确认这是您的问题。