Oracle 19c创建私有临时表报ORA-00903无效表名如何解决
根因说明
触发ORA-00903: invalid table name错误和权限、表空间配额无关,核心原因是私有临时表命名不符合数据库强制前缀规则:
你数据库的private_temp_table_prefix参数为默认值ORA$PTT_,该前缀匹配规则为大小写完全敏感的精确匹配,你建表时使用的表名ora$ppt_temp1前缀为小写ora$ppt_,和参数要求的大写前缀不匹配,Oracle直接判定表名非法。
额外说明:Oracle私有临时表存储在会话临时内存中,不会占用永久表空间空间,你之前给用户配置的USERS表空间配额对私有临时表不生效。
解决方法
将建表语句的表名调整为符合前缀要求的命名即可,修正后的SQL如下:
CREATE PRIVATE TEMPORARY TABLE ORA$PTT_temp1 ( name varchar2(7), age int, employed int ) ON COMMIT PRESERVE DEFINITION;
注意事项
- 私有临时表命名必须和
private_temp_table_prefix参数值完全字符匹配,大小写、符号不一致都会触发非法表名错误 - 现有
CREATE SESSION、CREATE TABLE权限已经完全满足创建私有临时表的要求,不需要额外授权 - 私有临时表仅对创建它的当前会话可见,会话断开后会自动清理删除,无需手动DROP
- 如需调整私有临时表强制前缀,可执行
ALTER SYSTEM SET private_temp_table_prefix='自定义前缀值' SCOPE=BOTH;修改参数,修改后所有新建私有临时表必须匹配新前缀规则
内容的提问来源于stack exchange,提问作者Paul D.
相关产品推荐
相关产品推荐

