在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触发器的基本教程,希望对你有所帮助。