oracle创建触发器学习记录

前提:学生表S,课程表C和学生选课表SC在sys用户下,字段如下:

  create table S_RZ0122 (
  Sno varchar2(11) primary key,
  Sname varchar2(20) not null,
  Ssex varchar(2) not null ,
  Sage number(2)  not null,
  Sdept varchar(20) not null
  )
 
 create table C_RZ0122(
   Cno varchar2(20) primary key,
   Cname varchar2(20) not null ,
   Ccredit number(2) not null
 )

 create table SC_RZ0122(
   Sno varchar2(11) not null,
   Cno varchar2(20) not null,
   Score number(3) ,
   primary key(Sno ,Cno),
   foreign key(Sno) references S_RZ0122(Sno),
   foreign key(Cno) references C_RZ0122(Cno)
 )

在JXGL数据库中创建一触发器,保证 S 表中学生的年龄在 8-45 岁之间。 

    触发器说明:(触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。

    首次创建出错:错误在下面,因为SYS用户所属的表中不能创建触发器,所以先复制了一份表到SYSTEM用户中,

 

再创建触发器

测试:

(4) 在 JXGL 数据库中创建一触发器,当有学生选了某门课时,不能从 C 表中删除 

同样的,先复制C课程表

再复制学生选课表:

创建触发器:

 

测试:成功

 

实验错误分析记录:

     整个实验做下来困难重重啊因为这些平时使用的不是很多,所以用起来很生疏,特别是触发器的使用的更少,这还是从头开始学了。Oracle也挺烦的,这么麻烦。以下是遇见的部分错误与感受,重要的都记下了,方便以后查看。

 

 

3、创建触发器报错

解决办法:再复制一份表到其他的用户下面,比如system

后来就可以了。。。

4、创建触发器2:报错不能有子查询

解决办法:统计SC学生选课表中该门课程的选课数目,如果选课数目大于0说明有学生选了,则不能删除

于是新问题来了,看样子要把学生选课表也复制进来???

结果成了,真想去屎,,,说明触发器创建的时候也不能穿透用户关系啊!别看平时查询加上用户名前缀就行。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值