12
返回列表 发新帖
楼主: lixy8998

[SQL] 求对一表执行插入时添加判断

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
11#
发表于 2016-11-22 06:02 | 只看该作者
用连接比UNION ALL更好:

CREATE TABLE A(a number primary key,b number,c number,d number);

CREATE TABLE B(a number primary key,e number,f number);


CREATE MATERIALIZED VIEW LOG ON A WITH SEQUENCE, ROWID,PRIMARY KEY INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW LOG ON B WITH SEQUENCE, ROWID,PRIMARY KEY INCLUDING NEW VALUES;

----------------------
CREATE MATERIALIZED VIEW MV_TEST_AB
REFRESH FAST ON COMMIT
AS
SELECT a.ROWID ARID
      ,b.ROWID BRID
      ,a.a     a1
      ,b.a     a2
  FROM a,b
WHERE a.a=b.a AND b.e=1;

ALTER TABLE  MV_TEST_AB ADD CONSTRAINT CHECK_AB_DATA CHECK(1=0);

---------------
测试:
INSERT INTO A VALUES(1,1,1,1);
INSERT INTO B VALUES(1,1,1);

jsu@JSU12P> COMMIT;
COMMIT
*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-02290: check constraint (JSU.CHECK_AB_DATA) violated

测试2:

INSERT INTO A VALUES(1,1,1,1);
INSERT INTO B VALUES(1,0,1);

jsu@JSU12P> COMMIT;

Commit complete.

使用道具 举报

回复
论坛徽章:
1
ITPUB15周年纪念
日期:2016-10-13 13:15:34
12#
 楼主| 发表于 2016-11-22 14:09 来自手机 | 只看该作者
newkid 发表于 2016-11-22 06:02
用连接比UNION ALL更好:

CREATE TABLE A(a number primary key,b number,c number,d number);

谢谢,我测试一下

使用道具 举报

回复
论坛徽章:
1
ITPUB15周年纪念
日期:2016-10-13 13:15:34
13#
 楼主| 发表于 2016-11-23 00:14 | 只看该作者
newkid 发表于 2016-11-22 06:02
用连接比UNION ALL更好:

CREATE TABLE A(a number primary key,b number,c number,d number);

用您的方法测试了,如果B 表数据没有重复是可以的,但因为业务上的需要,B表数据有重复的,不是一对一的关系,最后通过触发器解决的,谢了。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
14#
发表于 2016-11-23 01:04 | 只看该作者
lixy8998 发表于 2016-11-23 00:14
用您的方法测试了,如果B 表数据没有重复是可以的,但因为业务上的需要,B表数据有重复的,不是一对一的 ...

B表有重复是什么意思?用我的数据结构给个例子。
尽量不要用触发器,你的方法肯定是不够严密的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表