如何创建数据表并编写触发器实现ID自动录入
实现ID自动录入的数据表创建及PL/SQL代码示例
以下是完整的PL/SQL实现方案,涵盖数据表创建、ID字段自动赋值触发器,以及批量插入数据的存储过程和调用示例:
1. 创建数据表
创建用于存储人员信息的数据表,包含姓氏、名字和自增ID字段:
CREATE TABLE table8_prc ( Family VARCHAR2(200), Name VARCHAR2(200), ID INTEGER );
2. 创建序列生成自增ID
创建序列来生成ID字段的连续自增值:
CREATE SEQUENCE ID_seq1 MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20;
3. 创建触发器实现ID自动赋值
通过BEFORE INSERT触发器,在每次插入新记录前自动从序列获取下一个值,赋值给ID字段:
CREATE OR REPLACE TRIGGER trg1 BEFORE INSERT ON table8_prc FOR EACH ROW BEGIN SELECT ID_seq1.nextval INTO :new.ID FROM dual; END;
4. 创建批量插入数据的存储过程
该存储过程接收格式为名字;姓氏,名字;姓氏的字符串,通过正则拆分后批量插入数据(注:原代码中SELECT语句错误包含ID字段,已修正,因ID由触发器自动赋值,插入无需指定):
CREATE OR REPLACE PROCEDURE addnewmem1 (str IN VARCHAR2) AS BEGIN INSERT INTO table8_prc (Name, Family) WITH temp AS (SELECT REGEXP_SUBSTR(str, '[^,]+', 1, LEVEL) val FROM DUAL CONNECT BY LEVEL <= REGEXP_COUNT(str, ',') + 1) SELECT SUBSTR(val, 1, INSTR(val, ';') - 1), SUBSTR(val, INSTR(val, ';') + 1) FROM temp; COMMIT; END;
5. 调用存储过程示例
两次调用存储过程,批量插入两组人员信息:
BEGIN addnewmem1 ('faezeh;Ghanbarian,pari;izadi'); END; BEGIN addnewmem1 ('Saeed;Izadi,Saman; Rostami'); END;
内容的提问来源于stack exchange,提问作者Its_faezeh0308
相关产品推荐
相关产品推荐

