ubuntu

Ubuntu Oracle触发器使用教程

小樊
37
2025-06-03 10:09:17
栏目: 云计算

在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)
);
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;

部署触发器

注意事项

以上就是在Ubuntu上使用Oracle触发器的基本教程,希望对你有所帮助。

0
看了该问题的人还看了