QQ3031365
QQ3031365
Upartofmelikebreathing
关注数: 0
粉丝数: 24
发帖数: 2,225
关注贴吧数: 10
求助求助 麻辣隔壁第三季第四季片尾曲 RT
这个大概多少丹能上去啊 大号2500都没成 小号不敢弄了
想做个Win8 贴吧的app妈蛋的IIS死活打不开肿么破 妈蛋啊 百度自己做的太恶心了
妈蛋啊 开机就这样 无语了
#我的贴吧10年足迹,共同成长,深藏功与名 贴吧十年,时光匆匆,再回首,白驹过隙一分钟。 那些褪色的青春梦,普通得不能再普通,玩贴吧的都懂。 贾君鹏,追贴,抢楼,往事如风,足迹不留空。 http://tieba.baidu.com/home/zuji
merage into 该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。 1,insert 和update是可选的 2,UPDATE 和INSERT 后面可以跟WHERE 子句 3,在ON条件中可以使用常量来insert 所有的行到目标表中,不需要连接到源表和目标表 4,UPDATE 子句后面可以跟delete 来去除一些不需要的行。 举例: create table PRODUCTS ( PRODUCT_ID INTEGER, PRODUCT_NAME VARCHAR2(60), CATEGORY VARCHAR2(60) ); insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS'); insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS'); insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS'); insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS'); insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD'); commit; create table NEWPRODUCTS ( PRODUCT_ID INTEGER, PRODUCT_NAME VARCHAR2(60), CATEGORY VARCHAR2(60) ); insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS'); insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS'); insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS'); insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS'); commit; 1,可省略的update 或者insert MERGE INTO products p 2 USING newproducts np 3 ON (p.product_id = np.product_id) 4 WHEN MATCHED THEN 5 UPDATE 6 SET p.product_name = np.product_name, 7 p.category = np.category; 使用表newproducts中的product_name 和category字段来更新表products 中相同product_id的product_name 和category. 2,当条件不满足的时候把newproducts表中的数据INSERT 到表products中。 MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category); 3,带条件的insert 和update MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name WHERE p.category = np.category; insert 和update 都带有where 字句 MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.category = 'DVD' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category != 'BOOKS' 4,无条件的insert MERGE INTO products p USING newproducts np ON (1=0) WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'BOOKS' 5,delete 子句 1 merge into products p 2 using newproducts np 3 on(p.product_id = np.product_id) 4 when matched then 5 update 6 set p.product_name = np.product_name 7 delete where category = 'macle1_cate'; select * from products; PRODUCT_ID PRODUCT_NAME CATEGORY --------------------------------------- -------------------- -------------------- 1502 macle22 macle2_cate 1503 macle3 macle2_cate 1504 macle macle1_cate 1505 macle5 macle5_cate 1504 中的macle1_cate 满足delete where,但是不满足 on 中的条件,所以没有被删除。!!!!!!重点 ----------------------------------------------- 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作。 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert)。 实战: 接下来我们有一个任务,有一个表T,有两个字段a,b,我们想在表T中做Insert/Update,如果存在,则更新T中b的值,如果不存在,则插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下: if exists(select 1 from T where T.a='1001' ) update T set T.b=2 Where T.a='1001' else insert into T(a,b) values('1001',2); 以上语句表明当T表中如果存在a='1001' 的记录的话,就把b的值设为2,否则就Insert一条a='100',b=2的记录到T中。 但是接下来在Oracle中就遇到麻烦了,记得在Oracle 9i之后就有一条Merge into 的语句可以同时进行Insert 和Update的吗,Merge的语法如下: MERGE INTO table_name alias1 USING (table|view|sub_query) alias2 ON (join condition) WHEN MATCHED THEN UPDATE table_name SET col1 = col_val1, col2 = col2_val WHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values); 上面的语法大家应该都容易懂吧,那我们按照以上的逻辑再写一次。 MERGE INTO T T1 USING (SELECT a,b FROM T WHERE t.a='1001') T2 ON ( T1.a=T2.a) WHEN MATCHED THEN UPDATE SET T1.b = 2 WHEN NOT MATCHED THEN INSERT (a,b) VALUES('1001',2); 以上的语句貌似很对是吧,实际上,该语句只能进行更新,而无法进行Insert,错误在哪里呢? 其实在Oracle中Merge语句原先是用来进行整表的更新用的,也就是ETL工具比较常用的语法,重点是在Using上。 用中文来解释Merge语法,就是: 在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。 因此,严格意义上讲,”在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中alias2的记录数。” 以上这句话也就很好的解释了在上面写的语句为何只能进行Update,而不能进行Insert了,因为都Select不到数据,如何能进行Insert呢:) 接下来要改成正确的语句就容易多了,如下: MERGE INTO T T1 USING (SELECT '1001' AS a,2 AS b FROM dual) T2 ON ( T1.a=T2.a) WHEN MATCHED THEN UPDATE SET T1.b = T2.b WHEN NOT MATCHED THEN INSERT (a,b) VALUES(T2.a,T2.b); 查询结果,OK! 注意: 如果不懂Merge语句的原理,Merge语句是一条比较危险的语句,特别是在您只想更新一条记录的时候,因为不经意间,你可能就把整表的数据都Update了一遍.....汗!!! 我曾经犯过的一个错误如下所示,大家看出来是什么问题了吗? MERGE INTO T T1 USING (SELECT Count(*) cnt FROM T WHERE T.a='1001') T2 ON (T2.cnt>0) WHEN MATCHED THEN UPDATE SET T1.b = T2.b WHEN NOT MATCHED THEN INSERT (a,b) VALUES(T2.a,T2.b);
求助 求助 DECLARE V_PRDC_RECORD PRODUCT_CHANGES%ROWTYPE; TYPE T_PRD_CURSOR IS REF CURSOR; T_PRD T_PRD_CURSOR; V_COUNT INT; V_MAX_PRODUCT_ID PRODUCTS.PRODUCT_ID%TYPE; BEGIN SELECT MAX(PRODUCT_ID) INTO V_MAX_PRODUCT_ID FROM PRODUCTS; OPEN T_PRD FOR SELECT * FROM PRODUCT_CHANGES; LOOP FETCH T_PRD INTO V_PRDC_RECORD; EXIT WHEN T_PRD%NOTFOUND; SELECT COUNT(*) INTO V_COUNT FROM PRODUCTS PRD WHERE prd.product_type_id=V_PRDC_RECORD.product_type_id AND PRD.NAME = V_PRDC_RECORD.NAME AND PRD.DESCRIPTION = V_PRDC_RECORD.DESCRIPTION AND PRD.PRICE = V_PRDC_RECORD.PRICE; IF V_COUNT > 1 THEN SELECT PRODUCT_ID INTO V_PRDC_RECORD.PRODUCT_ID FROM PRODUCTS WHERE NAME = V_PRDC_RECORD.NAME; ELSE V_PRDC_RECORD.PRODUCT_ID := (V_MAX_PRODUCT_ID + 1); V_MAX_PRODUCT_ID := (V_MAX_PRODUCT_ID + 1); END IF; v_count:=0; SELECT COUNT(*) INTO v_count FROM products WHERE product_id=V_PRDC_RECORD.PRODUCT_ID; IF v_count<1 THEN INSERT INTO PRODUCTS VALUES (V_PRDC_RECORD.PRODUCT_ID, V_PRDC_RECORD.PRODUCT_TYPE_ID, V_PRDC_RECORD.NAME, V_PRDC_RECORD.DESCRIPTION, V_PRDC_RECORD.PRICE); END IF; END LOOP; DBMS_OUTPUT.PUT_LINE('insert' || T_PRD%ROWCOUNT || ' rows.'); CLOSE T_PRD;END; 判断重复出问题 是什么情况
【剑道独尊】估计要太监了 RT
求救 14r外壳大概多少钱 早上上班外壳摔坏了
求救 14r外壳大概多少钱 早上上班外壳摔坏了
求助 730M更新9.18.13NV控制面板不见了怎么办 求助 730M更新9.18.13NV控制面板不见了怎么办
求助 730M更新9.18.13NV控制面板不见了怎么办 求助 730M更新9.18.13NV控制面板不见了怎么办
求助 win7的客户端能装在win8上么? 如题
谁要微信福利卡 就刷到1张 去冲自己好竟然不能冲 RT
求助 这个选项怎么取消啊 RT我玩鹰击长空 看别人说全屏要去掉这个 但是我点了下没反应
qiuzhu为什么我装完了是白屏的啊 RT
【吐槽】二雷你牛
效率有回来拉 虽然掉拉一点,终于不被人喷拉。
效率有回来拉 虽然掉拉一点,终于不被人喷拉。
求核电 132 40场出M 大比分落后 我和队友不屑努力 主要是我132诡异的先穿了一下54 导致2个54 和-3 75不敢强吃我 被我方TD SPG打怂了 可惜没勇士 谢谢大家来看
新出炉的M 笑死人啊 阿拉慢机场 我方268 合对面班长100在1线水下对峙我在山顶 6发打邮箱吧他烧的只有几十点血哈哈
【求助】这是肿么啦
求助 AERO 谁知道AERO透明有时候莫名的就失效了,要重新去设置这是怎么回事?
【讨论】求贺电T29 刚出炉的M
【求助】GT650中效 有时候开镜会跳 RT有时候开镜瞄会跳 好像后边有人推你一样怎么破
vc++x86组件 雨滴要的那个 谁发个给我,谢谢。
[email protected]
SU85B 11杀屌丝逆袭哈哈 RT
求助德棍 最近转练亲爹系, 斯大林系列对敌多少度啊。
求助德棍 最近转练亲爹系, 斯大林系列对敌多少度啊。
吧务看下 能不能把更新贴全集中到一个贴子里,里边有各章节的链接,谢谢
吧务看下 能不能把更新贴全集中到一个贴子里,里边有各章节的链接,谢谢
白板也欢乐哈哈SU85B (*^__^*) 嘻嘻……
美国有苹果,韩国有三星,日本有索尼,那我们中国有什么? 如题
小火炮大欢乐 被坑一早上,大车不想开了买了辆t57,果断换92车组萌翻了。小TD一炮一个,把把有勋章。
坑爹的毛子 你妈的,一早上开59进十级房间你妈五个小时才80万**
谁有百练成仙前边章节的发个 rt.
[email protected]
发下谢谢有链接也行
有人要南区号么 4个八级炮外加暴走 落林51四个十级中坦 59歼机车只有南瓜重坦100和-3
1
下一页