在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
相关产品推荐
相关产品推荐

