易截截图软件、单文件、免安装、纯绿色、仅160KB

Oracle函数merge

把数据从一个表复制到另一个表,插入新数据或替换掉老数据是每一个ORACLE DBA都会经常碰到的问题。在ORACLE9i以前的年代,我们要先查找是否存在老数据,如果有用UPDATE替换,否则用INSERT语句插入,其间少不了还有一些标记变量等等,繁琐的很。现在ORACLE9i专为这种情况提供了MERGE语句,使这一工作变得异常轻松,
MERGE语句在9i的语法如下:
MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]
{ table | view | subquery } [t_alias] ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
例:
MERGE INTO tdest d
USING tsrc s ON (s.srckey = d.destkey)
WHEN MATCHED THEN
UPDATE SET d.destdata = d.destdata + s.srcdata
WHEN NOT MATCHED THEN
INSERT (destkey,destdata) VALUES (srckey,srcdata)
一条语句代替了原来的一段复杂语句,但是使用MERGE也是有要注意的地方的,看下面的例子:
CREATE TABLE tdest(destkey KEYTYE,destdata DATATYPE);
CREATE TABLE tsrc(srckey KEYTYE,srcdata DATATYPE);
--insert some rows into tsrc here.
MERGE INTO tdest d
USING tsrc s ON (d.destkey = s.srckey)
WHEN MATCHED THEN
UPDATE SET d.destkey = s.srckey
WHEN NOT MATCHED THEN
INSERT (d.destkey,d.destdata) VALUES (s.srckey,s.srcdata);
在Oracle 10g中MERGE有如下一些改进:
1、UPDATE或INSERT子句是可选的
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');
        i


相关文档:

用sqlplus为oracle创建用户和表空间


 用Oracle9i自带的企业管理器或PL/SQL图形化的方法创建表空间和用户以及分配权限是相对比较简单的,本文要介绍的是另一种方法,使用Oracle 9i所带的命令行工具:SQLPLUS来创建表空间,这个方法用起来更加简明快捷。
       
        假设 ......

如何在Oracle中复制表结构和表数据


1. 复制表结构及其数据:
create table table_name_new as select * from table_name_old
2. 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
3. 只复制表数据:
如果两个表结构一样:
insert into table_name_ ......

oracle导入文本文件

1.使用sqlldr
2.首先建立相应的表
create table test(ip1 number, ip2 number, locate varchar2(512),country varchar2(60),province varchar2(60),city varchar2(60))
3.写控制文件 city.ctl
load data
infile 'c:\city.txt'
append into table test
--when country='中国'
fields terminated by ','
(
ip1,
ip ......

oracle 查询计划中基数问题

最近发现一个比较有意思的问题:
当我们在执行一条查询语句时,如果条件谓词中含有函数,如 abs(age)<10,此时,通过查询计划看到的结果集的基数值与实际的值相差很大。当我们改变查询条件时,如abs(age)<20,这时的基数值不会改变,和abs(age)<10得到的基数值一样。
但现在还没找到问题的原因,searching... ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号