用oracle实现一个项目编号表,项目编号有十一位,前四位为“CXCY”,后期为为动态生成的七位数字,这七位数字的前四位是年份(范围是2022到2024),后三位为随机数,我们需要30组数据。请给出完全正确的代码,不要有任何的语法错误
时间: 2024-12-16 11:22:08 浏览: 12
在Oracle数据库中,你可以创建一个名为PROJECT_NO的序列,并结合系统函数和随机数生成器来满足你的需求。以下是创建表结构、序列以及插入数据的SQL语句示例:
```sql
CREATE TABLE project_numbers (
id NUMBER PRIMARY KEY,
project_no VARCHAR2(11)
);
-- 创建项目编号生成的序列
CREATE SEQUENCE proj_seq START WITH 100000000000 INCREMENT BY 1 MINVALUE 100000000000 MAXVALUE 999999999999;
-- 函数来获取当前年份并添加随机数
CREATE OR REPLACE FUNCTION generate_project_num RETURN VARCHAR2 AS
year NUMBER := TRUNC(SYSDATE) - 730; -- 从2022年减去730天得到2022年的开始日期
random_part NUMBER DEFAULT FLOOR(RAND() * 1000); -- 随机数范围0-999
BEGIN
RETURN 'CXCY' || LPAD(year + YEAR(SYSDATE), 4, '0') || LPAD(random_part, 3, '0');
END generate_project_num;
-- 插入数据
DECLARE
i NUMBER;
BEGIN
FOR i IN 1..30 LOOP
INSERT INTO project_numbers (id, project_no)
VALUES (proj_seq.NEXTVAL, generate_project_num());
END LOOP;
END;
/
-- 查询数据验证
SELECT * FROM project_numbers;
```
阅读全文