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

在APEX中用PL/SQL填充日期表遇ORA-00928错误求助

解决ORA-00928缺失SELECT关键字错误

问题根源:你创建的CALENDAR_TBL表中包含名为"DATE"的列,而DATE是Oracle的保留关键字。在插入语句中直接使用DATE作为列名时,Oracle会将其识别为SQL关键字,而非表的列名,进而触发语法错误。

解决方法:在INSERT语句的列名列表中,给DATE列加上双引号(与建表时的列定义格式保持一致)。

修改后的填充脚本:

DECLARE
  start_date DATE := TO_DATE('2017-01-01','YYYY-MM-DD');
  end_date DATE := TO_DATE('2025-12-31','YYYY-MM-DD'); -- 修正为需求中的结束日期
  current_date DATE := start_date;
BEGIN
  WHILE current_date <= end_date LOOP
    INSERT INTO CALENDAR_TBL ("DATE", DAY_NUMBER, MONTH_NUMBER, MONTH_NAME, YEAR, YEAR_MONTH_NUMBER, YEAR_MONTH_NAME, DAY_NAME)
    VALUES (
      current_date,
      TO_NUMBER(TO_CHAR(current_date, 'DD')),
      TO_NUMBER(TO_CHAR(current_date, 'MM')),
      TO_CHAR(current_date, 'MONTH'),
      TO_NUMBER(TO_CHAR(current_date, 'YYYY')),
      TO_NUMBER(TO_CHAR(current_date, 'YYYYMM')),
      TO_CHAR(current_date, 'YYYY MONTH'),
      TO_CHAR(current_date, 'DAY')
    );
    current_date := current_date + 1;
  END LOOP;
  COMMIT; -- 添加提交语句确保数据持久化
END;

额外提示:

  • 尽量避免使用Oracle保留关键字作为表名或列名,后续可考虑将DATE列重命名为CALENDAR_DATE这类非关键字名称,减少语法问题。
  • 原脚本结束日期为2050-12-31,已修正为你需求的2025-12-31。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:03:25