You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PL/SQL Developer中创建私有临时表报错ORA-00905求助

解决ORA-00905错误:Oracle私有临时表创建问题

你的代码触发ORA-00905错误,核心原因是Oracle私有临时表的创建语法不符合规范,主要有两个关键点没做到位:

1. 私有临时表的命名必须遵循特定前缀规则

Oracle要求私有临时表的名称必须以固定前缀开头:

  • 会话级私有临时表:前缀为 ORA$PTT_(表结构和数据会保留到会话结束)
  • 事务级私有临时表:前缀为 ORA$PTD_(表会在事务提交/回滚后自动删除)

你的表名my_temp_table没有加这个前缀,这是错误的根源之一。

2. 必须指定ON COMMIT子句定义表的生命周期

创建私有临时表时,必须通过ON COMMIT子句明确表的存活周期,可选值有:

  • ON COMMIT PRESERVE DEFINITION:会话级,提交事务后表结构和数据都保留,直到会话断开
  • ON COMMIT DROP TABLE:事务级,提交或回滚事务后,表直接被删除

修正后的代码示例

会话级私有临时表(常用场景)

CREATE PRIVATE TEMPORARY TABLE ORA$PTT_my_temp_table (
    id NUMBER,
    description VARCHAR2(20)
) ON COMMIT PRESERVE DEFINITION;

插入数据测试

INSERT INTO ORA$PTT_my_temp_table VALUES (1, 'Sample 1');
INSERT INTO ORA$PTT_my_temp_table VALUES (2, 'Sample 2');
COMMIT; -- 会话级表提交后数据依然存在
SELECT * FROM ORA$PTT_my_temp_table; -- 可以正常查询到数据

事务级私有临时表

CREATE PRIVATE TEMPORARY TABLE ORA$PTD_my_temp_table (
    id NUMBER,
    description VARCHAR2(20)
) ON COMMIT DROP TABLE;

这种表在执行COMMIT或ROLLBACK后,表会被自动删除,后续无法再查询到。

另外补充一点:私有临时表仅对当前会话可见,其他会话完全看不到这个表,这也是它和普通临时表的核心区别之一。

内容的提问来源于stack exchange,提问作者ilia rukhadze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:24:27