Oracle PL/SQL存储过程实现向MYTABLE插入2000至2100年日期
Oracle PL/SQL存储过程:填充MYTABLE日期数据
以下是符合需求的PL/SQL存储过程,用于向MYTABLE表批量插入2000-01-01至2100-01-01的日期数据:
CREATE OR REPLACE PROCEDURE POPULATE_MYTABLE IS BEGIN -- 批量插入日期数据,利用CONNECT BY生成连续日期序列 INSERT INTO MYTABLE (ID, DATE1, QUARTAL, MONTH, WEEKDAY) SELECT TO_CHAR(date_seq, 'YYYY') AS ID, date_seq AS DATE1, TO_CHAR(date_seq, '"Q"Q') AS QUARTAL, EXTRACT(MONTH FROM date_seq) AS MONTH, -- 判断是否为工作日(周一至周五为YES,周六周日为NO) CASE WHEN TO_CHAR(date_seq, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') IN ('SAT', 'SUN') THEN 'NO' ELSE 'YES' END AS WEEKDAY FROM ( -- 生成2000-01-01到2100-01-01的连续日期 SELECT DATE '2000-01-01' + LEVEL - 1 AS date_seq FROM DUAL CONNECT BY LEVEL <= DATE '2100-01-01' - DATE '2000-01-01' + 1 ); COMMIT; DBMS_OUTPUT.PUT_LINE('数据插入完成,共插入' || SQL%ROWCOUNT || '条记录'); EXCEPTION WHEN OTHERS THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE('插入失败,错误信息:' || SQLERRM); RAISE; END POPULATE_MYTABLE; /
字段逻辑说明
- ID:通过
TO_CHAR(date_seq, 'YYYY')将日期的年份转换为4位字符串格式。 - DATE1:利用
CONNECT BY生成的连续日期序列,覆盖2000-01-01至2100-01-01的每一天。 - QUARTAL:使用
TO_CHAR(date_seq, '"Q"Q')直接生成带Q前缀的季度标识(如Q1、Q2)。 - MONTH:通过
EXTRACT(MONTH FROM date_seq)提取日期对应的月份数字(1-12)。 - WEEKDAY:通过
CASE语句结合英文星期缩写判断,确保不受数据库语言环境影响,周六、周日标记为NO,其余工作日标记为YES。
使用说明
- 确保当前用户拥有
MYTABLE表的插入权限。 - 执行存储过程:
EXEC POPULATE_MYTABLE; - 可通过
DBMS_OUTPUT查看执行结果或错误信息。
内容的提问来源于stack exchange,提问作者rick67
相关产品推荐
相关产品推荐

