有两张表,A表、B表。
我要写一个触发器,当A表写入数据时判断“如果A表的ID值在B表中有记录,则数据就不写入A表,放弃写入”。请大家帮忙帮忙
我要写一个触发器,当A表写入数据时判断“如果A表的ID值在B表中有记录,则数据就不写入A表,放弃写入”。请大家帮忙帮忙
解决方案 »
- Oracle安装问题
- 在sql中的语句if exists(select*from sysdatabases where name=数据库名) 在oracle中怎么写?急急
- sql 问题
- 把另一台机的硬盘上oracle整个目录都copy到我本机上,两台机都装的是oracle9i,现在我想在我本机上恢复那台机的数据,请问有什么方法?
- 请问怎样用jdbc和oracle8i8.1.7连接谢谢!
- 如何优化delete语句?
- 导入数据时出现如下问题,大家看看如何解决,谢谢?
- 四个问题,请大家出手帮忙
- 在oracle的sql语句中可以实现从一个db查询另一个db吗?
- 在线高分急等!!
- 请问如何提取oracle数据库中正在执行的sql,并且怎么知道哪些sql是执行比较慢的,谢谢!
- 请教关于查询速度的问题?
create or replace trigger tri_B_id
after insert or update on B
for each row
declare
c_cnt int;
begin
select count(*) into c_cnt from t1 where id = :NEW.id;
If c_cnt >0
then
raise_application_error(-20000,'The ID is existing!');
end if;
end;
2. oracle是不推荐在trigger里面写逻辑判断的,影响性能. 使用select count(*)判断的方法不太好,与其这样还不如直接insert产生主键冲突然后抛出异常.
在我的印象中,外键约束是指子表中的某列的值必须在主表的某列中存在,好像没有说子表中的某列的值不在主表的某列中存在的情况。不清楚在这个问题上如何用外键约束?有人能给一个例子吗?2. 楼上用before insert?
重写列应该用before, 但是拒绝插入应该是after吧?3.oracle是不推荐在trigger里面写逻辑判断的,影响性能. 使用select count(*)判断的方法不太好,与其这样还不如直接insert产生主键冲突然后抛出异常.
这个说法是有疑问,首先我们不确定ID是否主键,其次这个问题不会产生"insert产生主键冲突然后抛出异常"这种情况,因为即使ID是主键,在没有主键冲突的情况也可能拒绝插入。