【发布时间】:2012-07-19 18:41:51
【问题描述】:
我有一个现有的表postn_matrix,其中包含员工列表和他们各自的计数。组织中的职位。
每当添加或删除用户的位置时,相应的计数都会通过此触发器反映在表中(VIA UPDATE)
现在,如果有一个新用户,他将在postn_matrix 中没有条目,所以我必须为他/她插入一条新记录(VIA INSERT)。这需要从 BASE TABLE 中引入。
更新似乎运行良好,但我无法将新用户引入表中。
我一直在尝试用光标处理这种情况。但它还没有任何帮助。 我希望一些专家可以向我展示光明.. :)。除了使用光标之外的任何其他建议将不胜感激
CREATE OR REPLACE TRIGGER TRIG1
BEFORE INSERT OR DELETE ON (BASETABLE)
FOR EACH ROW
DECLARE
cursor c1 is
select person_id
from postn_matrix;
v_temp varchar2(15);
BEGIN
IF INSERTING THEN
open c1;
LOOP
fetch c1 into v_temp;
if v_temp!=:new.person_id THEN
insert into POSTN_MATRIX (PERSON_ID)
VALUES (:new.PERSON_ID);
else
UPDATE POSTN_MATRIX
//this is working fine ;
END IF;
end loop;
close c1;
END
/
【问题讨论】:
-
我不明白。如果 BASETABLE 中有一条新记录,并且您已经知道 POSTN_MATRIX 中没有记录,那么为什么要循环遍历 POSTN_MATRIX 上的游标呢?只需插入一条新记录。
-
请拿一本关于 SQL 的基础书籍阅读一下。您确实需要一个游标来执行此操作,此外,您的 SQL 通常不应包含
if then语句。 SQL 是一种面向集合的语言。见codeproject.com/Articles/10144/SQL-as-a-set-oriented-language
标签: sql oracle triggers plsql cursor