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

执行Oracle动态SQL创建表时遇ORA-00922与ORA-06512错误,求排查

错误原因及解决方案

核心问题

你的代码里to_char(current_date)未指定格式掩码,默认生成的日期字符串会包含空格、冒号等Oracle表名不允许的非法字符(比如cs_trassen_hists_09-10-2024 14:35:22),这直接违反了Oracle对象命名规则,触发ORA-00922错误;ORA-06512是错误栈信息,仅指向错误发生的行(EXECUTE IMMEDIATE语句),并非问题根源。

修正方案

给to_char指定不含非法字符的格式掩码,生成合法表名:

  • 推荐纯数字格式(简洁无歧义):
DECLARE
    query clob;
BEGIN
    query := 'create table cs_trassen_hists_' || to_char(current_date, 'YYYYMMDD') || ' as select * from cs_trassen_hist';
    EXECUTE IMMEDIATE query;
END;
  • 也可使用下划线分隔的格式:
DECLARE
    query clob;
BEGIN
    query := 'create table cs_trassen_hists_' || to_char(current_date, 'YYYY_MM_DD') || ' as select * from cs_trassen_hist';
    EXECUTE IMMEDIATE query;
END;

额外说明

如果非要使用包含空格/特殊字符的表名,必须用双引号包裹表名,但会强制区分大小写,后续所有操作该表都要带双引号,非常繁琐,不推荐这种写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:13:08