成都创新互联网站制作重庆分公司

oracle怎么换字符,oracle替换字符串

Oracle如何替换多个字符?

可以通过replace函数来获取特定字符串后,进行字段更新实现:

成都创新互联公司于2013年开始,先为天峻等服务建站,天峻等地企业,进行企业商务咨询服务。为天峻企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

sql:update

tablename

set

name=replace(name,'替换前字段','替换后字段')

where

name

like

'%替换前字段%'。

上面的sql语句的意思是替换tablename中name字段的“替换前字段“为”替换后字段“,

where后面的语句是筛选出字段中带有”替换前字段“的name值。

在oracle存储过程中,如何替换字符

上面的回答都是对的,还是多说一句,如果你只是想改最后一个字符(xx这两个字符中也含有“变”不需要改):

udpate

test

set

name

=

substr(name

,1,length(name

)

-

1)

||

'站';

commit;

若确认xx两个字符不含“变”,或者含的话也要改掉,那么:

update

test

set

name

=

replace(name,'变','站');commit;

如何更改Oracle字符集

转载自寒思国内最常用的Oracle字符集ZHS16GBK(GBK

16-bit

Simplified

Chinese)能够支持繁体中文,并且按照2个字符长度存储一个汉字。UTF8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。

Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是说UTF8是ZHS16GBK的严格超集。

对于子集到超集的转换,Oracle是允许的,但是对于超集到子集的转换是不允许的。一般对于超集到子集的转换,建议是通过dbca删除原来的数据库,重新再建库,选择正确的字符集,然后导入备份。

我的方案是:先备份数据,然后强制转换字符集从UTF8到ZHS16GBK,然后导入备份数据。如果不行,才来重新建库,设置字符集ZHS16GBK,导入备份数据。如果这还不行,就把更改字符集从ZHS16GBK到UTF8(这是安全的),再导入备份数据,恢复到原始状况。这样就有可能避开重新建库的麻烦。

1.

备份数据库中所有用户的数据

以oracle用户登陆,执行以下命令

#

export

NLS_LANG

=

“SIMPLIFIED

CHINESE_CHINA.UTF8”

保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。

2.

评估UTF8转换成ZHS16GBK的风险

转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。

先安装属于

CSMIG

用户的一套表和过程。以oracle用户登陆UNIX,

#sqlplus

“/

as

sysdab”

SQL@$ORACLE_HOME/

rdbms/admin/csminst.sql

SQLexit

#

$ORACLE_HOME\bin\csscan

-help

可以更清楚如何使用csscan。

#

$ORACLE_HOME/bin/csscan

system/sunday

user=mmsc

FROMCHAR=UTF8

TOCHAR=ZHS16GBK

ARRAY=102400

PROCESS=3

csscan.log

以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。

查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。

3.

更改数据库的字符集为ZHS16GBK

前面说过,通过命令“Alter

Database

Characeter

Set

XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:

Alter

Database

Character

Set

INTERNAL_CONVERT/

INTERNAL_USE

XXXX

这是Oracle的非公开命令。“在使用这个命令时,Oracle会跳过所有子集及超集的检查,在任意字符集之间进行强制转换,所以,使用这个命令时你必须十分小心,你必须清楚这一操作会带来的风险”。

以oracle用户登陆UNIX,

#sqlplus

“/

as

sysdba”

SQL

SHUTDOWN

IMMEDIATE;

SQL

STARTUP

MOUNT;

SQL

ALTER

SESSION

SET

SQL_TRACE=TRUE;

SQL

ALTER

SYSTEM

ENABLE

RESTRICTED

SESSION;

SQL

ALTER

SYSTEM

SET

JOB_QUEUE_PROCESSES=0;

SQL

ALTER

SYSTEM

SET

AQ_TM_PROCESSES=0;

SQL

ALTER

DATABASE

OPEN;

SQL

ALTER

DATABASE

CHARACTER

SET

ZHS16GBK;

//如果不使用“INTERNAL_USE”参数,系统会提示出错:

//ERROR

at

line

1:

//ORA-12712:

new

character

set

must

be

a

superset

of

old

character

set

SQL

ALTER

SESSION

SET

SQL_TRACE=FALSE;

SQL

SHUTDOWN

IMMEDIATE;

SQL

STARTUP;

此时,检查一下数据库的字符集是否更改过来

SQL

select

value$

from

props$

where

name=’NLS_CHARACTERSET’;

VALUE$

-----------------

ZHS16GBK

紧接着检查一下数据库中简体中文、繁体中文是否正常,不会出现乱码。

SQLselect

spid,spname,spshortname

from

spinfovisual_hk

…...

非常不幸,我看到了一堆乱码,这也证明了Oracle不支持字符集从超集到子集的更改,当时心里很紧张,很怕失败,从而恢复到原样。

但是根据以前的验证,把UTF8下的备份导入到ZHS16GBK中去,是OK的,所以继续尝试。

4.

导入备份的用户数据

还是以oracle用户登陆UNIX,

先删除库中的用户mmsc:

#sqlplus

“/

as

sysdba”

SQLdrop

user

mmsc

cascade;

SQLexit

再运行createuser.sql,生成mmsc用户。

然后使用原来的备份文件,导入到mmsc用户中:

注意:先设置NLS_LANG要与当前数据库的一致:ZHS16GBK。这样,导出时用户会话的NLS_LANG为UTF8,与原先的数据库字符集一致;现在为ZHS16GBK,与此时的数据库字符集一致。这样,导入时,就会进行字符转换。

#

export

NLS_LANG

=

“SIMPLIFIED

CHINESE_CHINA.ZHS16GBK”

#imp

mmsc/mmsc@mdspdb

file=DSMPD113_user_mmsc.dmp

ignore=y

fromuser=mmsc

touser=mmsc

马上查看数据库中简体、繁体中文,哈哈,没有乱码了,一切显示正常。

紧接着进行验证,也证明了:1个汉字此时只占用2个字符长度。问题解决了!


分享文章:oracle怎么换字符,oracle替换字符串
网站URL:http://cxhlcq.com/article/heodgo.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部