Oracle触发器
--手办表
DROP TABLE T_GIRL;
CREATE TABLE T_GIRL(
ID NUMBER,
NAME VARCHAR2(30),
PRIMARY KEY(ID),
AGE NUMBER,
TCODE NUMBER
);
--数量表
DROP TABLE T_SQL_LOG;
CREATE TABLE T_SQL_LOG(
TID NUMBER ,
TNAME VARCHAR2(30),
TCODE VARCHAR(20),
TCOUNT NUMBER
);
--手办型号表
DROP TABLE T_T_GIRL;
CREATE TABLE T_T_GIRL(
TTName varchar2(10),
TTCODE NUMBER
);
-- 触发器案例1:
--当插入一条新数据,副表添加一条记录,TCOUNT为0,
--添加重复的数据(标识为NAME),不添加记录,Tcount +1
CREATE OR REPLACE TRIGGER TR_GIRL_2
BEFORE INSERT ON T_GIRL
FOR EACH ROW
DECLARE
v_count NUMBER;
BEGIN
--查询主表新增手办对应的数量(where tname=:new.name),并赋值给参数v_count(count(*) into v_count)
SELECT COUNT(*) INTO v_count
FROM T_SQL_LOG
WHERE TNAME = :NEW.NAME;
--判断是否是新增的手办,如果是向T_SQL_LOG(手办数量表)添加一条新手办的数量信息(count=1,tcode=:new.tcode,tname=:new.name)
--如果不是新增的手办,则对应数量表数量+1(tcount+1)
IF v_count > 0 THEN
UPDATE T_SQL_LOG
SET TCOUNT = TCOUNT + 1
WHERE TNAME = :NEW.NAME;
ELSE
INSERT INTO T_SQL_LOG (TID, TNAME, TCODE, TCOUNT)
VALUES (:NEW.ID, :NEW.NAME, :NEW.TCODE, 1);
END IF;
END;
--SELECT 查询出来的字段 INTO 需要被赋值的参数 FROM 查询的表名 where 条件
--触发器:案例二
--添加数据时,如果TCOUNT为空,那就去T_T_GIRL表中找,对应关系是NAME-TTNAME
--如果没有就在T_T_GIRL添加一条数据与之对应,name=:new.name,ttcode=:new.id||1001
CREATE OR REPLACE TRIGGER TR_GIRL_3
BEFORE INSERT ON T_GIRL
FOR EACH ROW
DECLARE
--V-COUNT NUMBER;
BEGIN
IF :NEW.TCODE IS NULL THEN
BEGIN
-- 查询 T_T_GIRL 表中是否存在与 :NEW.NAME 匹配的 TTName,如果有,则将新数据的TCODE(:NEW.TCODE)替换成查询出来的值
--SELECT TTCODE INTO V-CODE FROM T_T_GIRL WHERE TTNAME=:NEW.NAME;
SELECT TTCODE INTO :NEW.TCODE FROM T_T_GIRL WHERE TTNAME=:NEW.NAME;
--:NEW.TCODE := v_TTCODE;
-- 如果找不到对应的数据,插入新数据
EXCEPTION WHEN OTHERS THEN
INSERT INTO T_T_GIRL (TTName, TTCODE) VALUES (:NEW.NAME, :NEW.ID || 1001);
--:NEW.TCODE := :NEW.ID || 1001; -- 更新 :NEW.TCODE
SELECT TTCODE INTO :NEW.TCODE FROM T_T_GIRL WHERE TTNAME=:NEW.NAME;
END;
END IF;
END;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!