oracle触发器怎么判断条件

我有两张表,一个是班级和学生表CREATETABLEclasss(c_idvarchar(12),c_NAMEnvarchar2(50),c_sidvarchar(12)... 我有两张表,一个是班级和学生表
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;
展开
 我来答
xinjie_208
推荐于2017-11-25 · 超过26用户采纳过TA的回答
知道答主
回答量:53
采纳率:100%
帮助的人:59.5万
展开全部
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 不能为空!
天才伍奎光
2012-03-05 · TA获得超过151个赞
知道答主
回答量:115
采纳率:0%
帮助的人:73.7万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式