Kri*_*hna 1 oracle triggers oracle11g
我正在使用oracle 11gR1数据库.问题是,我有一个表格,下面给出了一个脚本: -
CREATE TABLE TEST(
ID NUMBER,
CATEGORY VARCHAR2(19),
CODE VARCHAR2(20),
URI VARCHAR2(160));
Run Code Online (Sandbox Code Playgroud)
现在我的目标是创建一个触发器,URI当TEST表中的行插入或更新时,每次使用下面计算的字符串更新列.
URI列将使用'uri://cateogry/code'.所以我创建了一个触发器:
CREATE OR REPLACE TRIGGER TEST_URI_UPDATE_TRIG
AFTER INSERT OR UPDATE OF CATEGORY, CODE ON TEST
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION; --added later after getting error(mutating, trigger/function may not see it error) during insertion
BEGIN
DBMS_OUTPUT.PUT_LINE('-------------EXECUTING TRIGGER----------');
UPDATE TEST
SET URI = 'uri://' || upper(:NEW.CATEGORY) || '/' || upper(:NEW.CODE)
WHERE ID = :NEW.id;
--Just to print the output
DBMS_OUTPUT.PUT_LINE('OLD VALUE IS : ' || :OLD.ID || ' EXECUTING TRIGGER ID IS : ' || :NEW.ID);
DBMS_OUTPUT.PUT_LINE('OLD VALUE IS : ' || UPPER(:OLD.CATEGORY) || ' EXECUTING TRIGGER ID IS : ' || upper(:NEW.CATEGORY));
DBMS_OUTPUT.PUT_LINE('OLD VALUE IS : ' || UPPER(:OLD.CODE) || ' EXECUTING TRIGGER ID IS : ' || upper(:NEW.CODE));
COMMIT; --added later after getting error(mutating, trigger/function may not see it error) during insertion
END;
/
Run Code Online (Sandbox Code Playgroud)
值将仅插入ID, CATEGORY, CODE不在列中的URI列中.
现在,如果我在TEST表中插入或更新值.
触发器不更新表的URI列TEST(不知道为什么).即使通过DBMS_OUTPUT打印消息打印值.
我尝试VIRTUAL COLUMN在Oracle中使用,但这不符合我的要求,因为我希望URI列值必须存在于数据库中,这是不可能的.
所以,请你帮助我,并建议任何方式来做到这一点.
创建前行触发器.然后更改URI值,如下所示
:NEW.URI := 'uri://'||upper(:NEW.CATEGORY)||'/'||upper(:NEW.CODE);
Run Code Online (Sandbox Code Playgroud)
无需选择或更新.使用以下内容可以获得这些值:NEW伪列,
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |