我正在尝试在Oracle中创建一个触发器,在插入表格后添加用户名的全名。我已经有一个触发器,在插入表格后在ADDED_BY列中添加用户名,我的想法基本上是将用户名的全名添加到新列FULLNAME中,其中FULLNAME = ADDED_BY。
这是我到目前为止所得到的。此触发器添加相同的FULL NAME,而不是与用户名对应的FULL NAME!
create or replace TRIGGER USERNAME_TO_FULLNAME
BEFORE INSERT OR UPDATE ON TABLE
FOR EACH ROW
BEGIN
IF INSERTING THEN
:new."ADDED_BY" := USER;
:new."FULLNAME" := 'FULL NAME';
ELSE
:new."FULLNAME" := :old."FULLNAME";
END IF;
END;
编辑:我在GIS环境中有一个Oracle Spatial数据库。在这种环境中,许多人使用数据库来创建对象(例如:绘制代表建筑物和房屋的多边形),在这样的环境中,有必要跟踪谁以元数据的形式做了什么。假设有一位土地测量师,他的名字是George Clooney,他在数据库中有用户名GEOCLO。当该用户在数据库中创建对象时,会触发一个触发器,将值“GEOCLO”插入名为ADDED_BY的列中(此触发器今天已存在于数据库中),以便当人们单击该对象时,他们知道它已创建土地测量师Georgoe Clooney。
问题是,几年后,乔治克鲁尼可能会改变他在公司中的角色而另一个人进来,可能是GIS部门的经理改变了他们的工作,因此很难知道GEOCLO是谁/是谁! 我想要做的是,每当George Clooney创建一个对象时,会触发一个触发器,将值“George Clooney”插入一个名为FULL_NAME的列,就像另一个触发器将值“GEOCLO”插入到ADDED_BY列一样。
我在原始问题中提到的目的是,在用户创建新对象之后,将一个用户的全名添加到FULL_NAME列,问题是如何在创建新对象时在同一触发器中添加其他用户的名称?希望现在的问题更加清晰。
答案 0 :(得分:0)
IF INSERTING THEN
:new."ADDED_BY" := USER;
:new."FULLNAME" := :new."FULLNAME";
ELSE
:new."FULLNAME" := :old."FULLNAME";
END IF;
:new."FULLNAME" := 'FULL NAME';
这意味着,如果要将新值插入'FULL NAME'
列,则要为:new."FULLNAME"
分配字符串"FULLNAME"
,请使用:new."FULLNAME"
。我想如果新值正确,则不需要提及此:new."FULLNAME" = :new."FULLNAME"
。