【发布时间】:2016-11-27 02:44:40
【问题描述】:
我的要求是:有两个表:a)C_Table,b)Mst_Table
两者具有相同的表结构,具有三列:i)S_NO,ii)CONTENT_ID,iii)INSTANCES
Mst_Table 最初有三个记录:
INSERT INTO Mst_Table Values (1, 'A1', 20);
INSERT INTO Mst_Table Values (2, 'A2', 10);
INSERT INTO Mst_Table Values (3, 'A3', 5);
现在,我在表 C_table 中插入四条记录:
INSERT INTO C_Table Values (1, 'A1', 22);
INSERT INTO C_Table Values (2, 'A4', 20);
INSERT INTO C_Table Values (3, 'A5', 5);
INSERT INTO C_Table Values (4, 'A1', 18);
当记录插入到表 C_table 中时,它应该检查列 - CONTENT_ID、Mst_Table 是否已经有任何记录。如果不是,则插入将在 C_table 中成功完成,但如果是,则它将检查列 - INSTANCES。
如果C_Table 的INSTANCES 值大于Mst_Table,则在INSTANCES 列的C_table 值中应使用(INSTANCES_Value_C_Table - INSTANCES_Value_Mst_Table) 值进行更新。
触发器定义:
create or replace trigger ANALYTICS_UPDATE_COUNT
after insert on C_Table referencing old as old new as new
for each row
DECLARE -- variable declarations
v_instance number;
v_count number;
BEGIN
insert into temp_logger (log_text)
values ('-------------BEGIN-------------');
-- trigger code
BEGIN
select distinct INSTANCES
into v_instance
from Mst_Table
where CONTENT_ID = :new.CONTENT_ID;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
insert into temp_logger (log_text) values ('Count for ' || :new.CONTENT_ID|| ' is : '|| v_instance);
insert into temp_logger (log_text) values ('Difference between new and existing: ' || (:new.INSTANCES - v_instance));
if ((:new.INSTANCES - v_instance) <=0 ) then
v_count := 0;
else
v_count := (:new.INSTANCES - v_instance);
end if;
insert into temp_logger (log_text) values ('v_count variable: ' ||v_count);
if v_count = 0 then
insert into temp_logger (log_text) values ('Inside IF');
DELETE from C_Table where CONTENT_ID = :new.CONTENT_ID;
COMMIT;
else
insert into temp_logger (log_text) values ('Inside ELSE');
UPDATE C_Table
set INSTANCES = v_count
where CONTENT_ID = :new.CONTENT_ID;
COMMIT;
end if;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
【问题讨论】:
-
您是在 SQL Server、MySQL 和 Oracle 上开发这个吗?如果不是,请删除不需要的标签。这些不像社交媒体上的哈希标签。
-
@JonathonOgden:感谢您的编辑和建议,是的,我将删除哈希标签。另外,我需要理解一件事,我需要添加以下内容,但没有得到编辑代码的代码工具栏:
-
已添加(可能是一些语法问题)。请删除 cmets。
-
@JonathonOgden:完成。谢谢
标签: sql oracle plsql oracle11g plsqldeveloper