当前位置:文章写作网 >日记 >日记 >oracle 小知识点

oracle 小知识点

2008-09-10 17:56 作者:tshfang 阅读量:7552 推荐9次 | 我要投稿

数据从其他管理系统中导入到现在的管理系统中。

需要调整原数据使之符合现有数据格式,在工作中涉及oracle

pl sql的一些应用。

1、MATERIALname字段数据过长,现有系统不能接受,发现原系统数据中

有很多全角字符和空格。

使用replace()函数将字符替换:

语法:

REPLACE(’string’,’s1’,’s2’)

string 希望被替换的字符或变量

s1 被替换的字符串

s2 要替换的字符串

update MATERIALS1

set MATERIALname=replace(MATERIALname,'(','(') ;

update MATERIALS1

set MATERIALname=replace(MATERIALname,')',')');

用半角字符括号替换数据中的全角字符括号

update MATERIALS1

set MATERIALname=replace(MATERIALname,' ','')

删除数据中的空格

2、现在的管理系统要求materialid为20位,而源系统只是15位

使用lpad()函数填充。

语法:

RPAD 在列的右边粘贴字符

LPAD 在列的左边粘贴字符

LTRIM 删除左边出现的字符串

RTRIM 删除右边出现的字符串

update materials1

set materialid=lpad(rtrim(materialid),20,'0');

扩充id到20位,前边用0补齐。

3、materialsortpath字段是新系统的字段,源系统没有此字段,

通过materialcode编辑使之成为materialsortpath字段

使用字符串连接||和取字串函数substr():

语法:

SUBSTR(string,start,count)

取子字符串,从start开始,取count个

update Materials1

set materialsortpath=('00'||substr(materialcode,1,2))

where substr(materialcode,1,1)=7

4、跟新materials2(10万条记录)表的数据需要和measureunits(1万条记录)关联。

在sql server中可以这样写:

update materials2

set customfield5=unitid

from measureunits

where customfield4=unitname and flag=1

oracle中不支持update from这种格式可以使用如下格式:

update materials2

set customfield5=(select unitid from measureunits where customfield4=unitname and flag=1)

但是数据量太大,这样跟新比较慢。

我们可以使用merge来跟改数据:

MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。

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, p.category = np.category;

INSERT 例子:

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);

在数据整理中使用如下语句进行跟新:

merge into materials2 a

using measureunits b

on (a.customfield4=b.unitname and b.flag=1)

when matched then

update set

a.customfield5=b.unitid;

其他人在看啥

    《oracle 小知识点》的评论 (共 0 条)

    • Guest::luguo
    • Guest::peifu