首先,这个问题来自我公司的数据库,我无法改变这个表的结构,因为它会影响其他项目。
我有一个包含5列的表T_CONTACT:CTO_RECNUM,CTO_COMPANY,CTO_NAME,CTO_TYPE,CTO_INFO。
此表格中的每一行代表一个联系人信息。
例如,在表中我们有:
CTO_RECNUM CTO_COMPANY CTO_NAME CTO_TYPE CTO_INFO
---------------------------------------------------------------------------------
12435 HIS COMPANY Mr. SCOTT 'TEL' 'phone_number_here'
12436 HIS COMPANY Mr. SCOTT 'FAX' 'fax_number_here'
12437 HIS COMPANY Mr. SCOTT 'EML' 'email_adresse_here'
12438 OTHER COMPANY Mr. PAUL 'FAX' 'fax_number_here'
我想添加一个新列,以便为两列(CTO_COMPANY,CTO_NAME)提供唯一ID。
我想有类似的东西:
CTO_RECNUM CTO_COMPANY CTO_NAME CTO_TYPE CTO_INFO
-----------------------------------------------------------------------------------------
12435 HIS COMPANY Mr. SCOTT 'TEL' 'phone_number_here' 1
12436 HIS COMPANY Mr. SCOTT 'FAX' 'fax_number_here' 1
12437 HIS COMPANY Mr. SCOTT 'EML' 'email_adresse_here' 1
12438 OTHER COMPANY Mr. PAUL 'FAX' 'fax_number_here' 2
最后一列代表新列。
我添加了一个“CTO_ID”列,我试图在此表上设置一个触发器:
create or replace
trigger T_TRG_ADD_CTO_ID
before insert or update on T_CONTACT
for each row
declare
CTO_PREV number;
begin
select CTO_ID into CTO_PREV from T_CONTACT
where CTO_COMPANY=:NEW.CTO_COMPANY and CTO_NAME=:NEW.CTO_NAME;
if(CTO_PREV is not null) then
:NEW.CTO_ID:=CTO_PREV;
else
:NEW.CTO_ID:=T_SEQ_CTO_ID.NEXTVAL;
end if;
end;
在插入或更新行之前,我尝试在表中查找是否已设置CTO_ID 对于当前行(将插入或更新的行)的情侣(CTO_COMPANY,CTO_NAME)。
如果找到值,则将其放入:NEW.CTO_ID。如果没有,我从我创建的序列中获取一个值。
我认为这足以解决我的问题,但此触发器会返回异常:Mutating table
。经过研究,我发现我不允许从同一触发器中使用的表中选择数据。
拜托,您能帮我找到解决问题的方法吗?