首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 写个触发器 [已结贴,结贴人:liujianliang]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liujianliang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-08 14:09:06 楼主

    建表的代码写好了,帮忙看下触发器怎么写
    SQL code
    create table student--学生 ( stuNo number(3), stuName varchar2(15), stuAge number(3), classNo number(3) ); INSERT INTO STUDENT ( STUNO, STUNAME, STUAGE, CLASSNO ) VALUES ( 1, '张三', 18, 1); INSERT INTO STUDENT ( STUNO, STUNAME, STUAGE, CLASSNO ) VALUES ( 2, '李四', 20, 2); INSERT INTO STUDENT ( STUNO, STUNAME, STUAGE, CLASSNO ) VALUES ( 3, '王五', 22, 3); create table classes-- ( classNo number(3), ProName varchar2(15),--专业名 deptName varchar2(15)--系名 ); INSERT INTO CLASSES ( CLASSNO, PRONAME, DEPTNAME ) VALUES ( 1, '计算机', '物理系'); INSERT INTO CLASSES ( CLASSNO, PRONAME, DEPTNAME ) VALUES ( 2, '数学', '数学系'); INSERT INTO CLASSES ( CLASSNO, PRONAME, DEPTNAME ) VALUES ( 3, '历史', '历史系'); create table department-- ( deptNo number(3), deptName varchar2(15)--系名 ) INSERT INTO DEPARTMENT ( DEPTNO, DEPTNAME ) VALUES ( 1, '数学系'); INSERT INTO DEPARTMENT ( DEPTNO, DEPTNAME ) VALUES ( 2, '物理系'); INSERT INTO DEPARTMENT ( DEPTNO, DEPTNAME ) VALUES ( 3, '历史系');
    70  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bw555
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 14:32:081楼 得分:10
    delete from classes
    where classes='要删的班级' and not exists (select * from student where classno=classes.classno)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bw555
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 14:35:442楼 得分:10
    delete from classes
    where classno='要删的班级' and not exists (select * from student where classno=classes.classno)

    当要删的班级没学生的时候直接删掉,
    有学生的时候不满足第二个条件,不会删掉
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • todayg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 14:36:193楼 得分:0
    触发器要实现什么样的功能?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • todayg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 14:36:414楼 得分:0
    哦,先看看
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oracledbalgtu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 14:39:025楼 得分:40
    SQL code
    CREATE OR REPLACE TRIGGER TRG_DEL_STUDENT AFTER DELETE ON STUDENT FOR EACH ROW DECLARE pragma autonomous_transaction; i INT; BEGIN SELECT COUNT(*) INTO i FROM student WHERE stuno <>:old.stuno AND classno=:old.classno; IF i=0 THEN DELETE FROM classes WHERE CLASSNO=:old.CLASSNO; END IF; COMMIT; END; /
    引用楼主 liujianliang 的帖子:

    建表的代码写好了,帮忙看下触发器怎么写

    SQL code
    create table student--学生
    (
    stuNo number(3),
    stuName varchar2(15),
    stuAge number(3),
    classNo number(3)
    );
    INSERT INTO STUDENT ( STUNO, STUNAME, STUAGE, CLASSNO ) VALUES (
    1, '张三', 18, 1);
    INSERT INTO STUDENT ( STUNO, STUNAME, STUAGE, CLASSNO ) VALUES (
    2, '李四', 20, 2);
    INSERT INTO STUDENT ( STUNO, STUNAME, STUAGE, CLASSN…
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • todayg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 15:05:116楼 得分:0
    楼上的你真强!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liujianliang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 09:41:277楼 得分:0
    引用 5 楼 oracledbalgtu 的回复:
    SQL code
    CREATE OR REPLACE TRIGGER TRG_DEL_STUDENT
      AFTER DELETE ON STUDENT  FOR EACH ROW
    DECLARE
    pragma autonomous_transaction;
    i INT;
    BEGIN
    SELECT COUNT(*) INTO i FROM student WHERE stuno <>:old.stuno AND classno=:old.classno;
    IF i=0 THEN
      DELETE FROM classes WHERE CLASSNO=:old.CLASSNO;
    END IF;
    COMMIT;
    END;

    感觉好像有点问题?这个触发器是针对classes表的,还有怎么用“:old”引用student表和classes表的classNO?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fxianxian
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 11:33:228楼 得分:10
    SQL code
    delete from classes a where not exists (select 1 from student b where a.classno=b.classno )
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved