在Ubuntu上使用Oracle触发器主要涉及创建、部署以及测试触发器。以下是详细步骤:
CREATE TABLE 病案主页_TRIGGER_LOG(
病人id NUMBER(18),
主页id NUMBER(5),
filedidname VARCHAR2(50),
ovalue VARCHAR2(200),
nvalue VARCHAR2(200),
optype VARCHAR2(30),
opttime DATE,
sessionid VARCHAR2(10),
clientgroupinfo VARCHAR2(30),
clientuser VARCHAR2(30),
clienipaddress VARCHAR2(30)
);
病案主页
表的UPDATE
操作之后执行,并记录相关信息到病案主页_TRIGGER_LOG
表中。CREATE OR REPLACE TRIGGER TRIGGER_病案主页
AFTER UPDATE ON 病案主页
FOR EACH ROW
DECLARE
病案id 病案主页_TRIGGER_LOG.病人id%type;
主页id 病案主页_TRIGGER_LOG.主页id%type;
opttime 病案主页_TRIGGER_LOG.opttime%type := sysdate;
optype 病案主页_TRIGGER_LOG.optype%type;
filedidname 病案主页_TRIGGER_LOG.filedidname%type;
ovalue 病案主页_TRIGGER_LOG.ovalue%type;
nvalue 病案主页_TRIGGER_LOG.nvalue%type;
SESSIONID 病案主页_TRIGGER_LOG.sessionid%type;
CLIENTGROUPINFO 病案主页_TRIGGER_LOG.Clientgroupinfo%type;
CLIENTUSER 病案主页_TRIGGER_LOG.Clientuser%type;
CLIENIPADDRESS 病案主页_TRIGGER_LOG.Clienipaddress%type;
BEGIN
SELECT SYS_CONTEXT('USERENV', 'SESSIONID') ,
sys_context('USERENV', 'HOST') ,
sys_context('USERENV', 'OS_USER') ,
sys_context('USERENV', 'IP_ADDRESS')
INTO SESSIONID, clientgroupinfo, clientuser, CLIENIPADDRESS
FROM dual;
IF UPDATING THEN
optype := 'UPDATE';
病案id := :new.病人id;
主页id := :new.主页id;
-- 住院号更新逻辑
IF :old.住院号 <> :new.住院号 THEN
INSERT INTO 病案主页_TRIGGER_LOG(病人id, 主页id, '住院号', :old.住院号, :new.住院号, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS)
VALUES (病人id, 主页id, '住院号', :old.住院号, :new.住院号, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS);
COMMIT;
END IF;
-- 姓名更新逻辑
IF :old.姓名 <> :new.姓名 THEN
INSERT INTO 病案主页_TRIGGER_LOG(病人id, 主页id, '姓名', :old.姓名, :new.姓名, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS)
VALUES (病人id, 主页id, '姓名', :old.姓名, :new.姓名, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS);
COMMIT;
END IF;
-- 门诊医师更新逻辑
IF :old.门诊医师 <> :new.门诊医师 THEN
INSERT INTO 病案主页_TRIGGER_LOG(病人id, 主页id, '门诊医师', :old.门诊医师, :new.门诊医师, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS)
VALUES (病人id, 主页id, '门诊医师', :old.门诊医师, :new.门诊医师, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS);
COMMIT;
END IF;
ELSIF DELETING THEN
optype := 'DELETE';
病案id := :old.病人id;
主页id := :old.主页id;
INSERT INTO 病案主页_TRIGGER_LOG(病人id, 主页id, '删除操作', :old.病人id, NULL, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS)
VALUES (病人id, 主页id, '删除操作', :old.病人id, NULL, optype, opttime, SESSIONID, CLIENTGROUPINFO, CLIENTUSER, CLIENIPADDRESS);
COMMIT;
END IF;
END;
病案主页
表进行UPDATE
或DELETE
操作来测试触发器是否按预期工作。以上就是在Ubuntu上使用Oracle触发器的基本教程,希望对你有所帮助。