【发布时间】:2015-06-18 11:04:06
【问题描述】:
我试图在 Oracle 中创建一个触发器,在插入表后添加用户名的全名。我已经有一个触发器,在插入表后将用户名添加到 ADDED_BY 列中,我的想法基本上是将用户名的全名添加到新列 FULLNAME 中,其中 FULLNAME = ADDED_BY。
这是我到目前为止所带来的。此触发器添加相同的全名,而不是与用户名对应的全名!
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。当该用户在数据库中创建对象时,触发触发器以在名为 ADDED_BY 的列中插入值“GEOCLO”(此触发器今天已存在于数据库中),以便当人们单击该对象时,他们知道它已创建由土地测量师乔治克鲁尼。
问题是,几年后,乔治克鲁尼可能会改变他在公司的角色,并且另一个人进来,并且可能 GIS 部门的经理改变了他们的工作,因此很难知道 GEOCLO 是谁! 我想要做的是每当 George Clooney 创建一个对象时,就会触发一个触发器,它将值“George Clooney”插入到名为 FULL_NAME 的列中,就像另一个触发器将值“GEOCLO”插入到 ADDED_BY 列中一样。
到目前为止,如原始问题中所述,我能够做的是在该用户创建新对象之后将 一个用户 的全名添加到 FULL_NAME 列中,问题是当他们创建新对象时,如何在同一个触发器中添加其他用户的名称?希望这个问题现在更清楚一点。
【问题讨论】:
-
“全名”应该从哪里来?
-
我猜是插入操作中的新条目
-
试试 :new."FULLNAME" := :new."FULL NAME'";
-
我不明白你想在这里完成什么。要将 USER 写入 ADDED_BY 和 FULLNAME 吗?
-
请参考以下链接,这可能有助于您更好地理解触发器 - docs.oracle.com/cd/B19306_01/appdev.102/b14251/…
标签: sql oracle plsql oracle11g triggers