oracle触发器怎么判断条件

我有两张表,一个是班级和学生表
CREATE TABLE classs
(
c_id varchar(12),
c_NAME nvarchar2(50),
c_sid varchar(12)--外键
)
CREATE TABLE students
(
s_id varchar(12),
s_NAME nvarchar2(50),
s_cid varchar(12)---外键
)
---触发器
create or replace trigger tri_id
before INSERT on students
for each row
BEGIN
IF :new.s_ID=NULL THEN
SELECT c_id into :new.s_ID from calsss where c_cid=:NEW.s_sid;
END IF;
end;
我想在插入学生的时候,假如用户没有填写学生id ,但填写了外键id,就根据外键id查找到相应的班级id,把班级id赋给学生id,如果用户填写了学生id 就不让触发器自动填写了(学生表id可以重复性),小生不才只能写出上面那样了,麻烦大侠们帮帮忙,这个触发器的条件怎么去控制!
---上面的触发器写错了
create or replace trigger tri_id
before INSERT on students
for each row
BEGIN
IF :new.s_ID=NULL THEN
SELECT c_id into :new.s_ID from calsss where c_sid=:NEW.s_cid;
END IF;
end;

oracle判断为空是用is null不是=null;
在oracle中=null一直都是返回false的。
另外最好加上exception判断:
IF :new.s_ID IS NULL THEN
BEGIN
SELECT c_id into :new.s_ID from classs where c_sid=:NEW.s_cid;
EXCEPTION
WHEN no_data_found THEN
SELECT 0 INTO :new.s_ID FROM dual; --或者其他操作
END;
END IF;
当在classs表中没有找到对应的记录时不至于出错,看你要怎么设计咯。追问

哦,这样还有一个毛病,就是我的s_id 是不为空的,但是上面我在插入的时候还是老提示我s_id 不能为空!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-05
相似回答