报错1:ORA-01756: quoted string not properly terminated 字符集编码不一致造成的中文内容无法插入 查询当前数据库的字符编码设置: SQL select * from v$nls_parameters T WHERE t.PARAMETER = NLS_LANGUAGE or t.PARAMETER = NLS_CHARACTERSET; 或者 SQL
报错1:ORA-01756: quoted string not properly terminated
字符集编码不一致造成的中文内容无法插入
查询当前数据库的字符编码设置:
SQL> select * from v$nls_parameters T WHERE t.PARAMETER = ‘NLS_LANGUAGE’ or t.PARAMETER = ‘NLS_CHARACTERSET’;
或者
SQL> select userenv(‘language’) from dual;
查询客户端字符集编码
linux下:
echo $NLS_LANG
Windows下:
echo %NLS_LANG%
设置客户端字符集编码:
LINUX下:
# 常用unicode字符集
export NLS_LANG=american_america.AL32UTF8
# 常用中文字符集
可以编辑 bash_profile 文件进行永久设置
vi .bash_profile
export NLS_LANG=”SIMPLIFIED CHINESE_CHINA.ZHS16GBK”
or export NLS_LANG=”Simplified Chinese_china”.ZHS16GBK
# 使 bash_profile 设置生效
source .bash_profile
Windows下:
# 常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
# 常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
可以通过修改注册表键值永久设置
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG
修改服务器端字符集:
SQL>conn / as sysdba;
若此时数据库服务器已启动,则先执行 SHUTDOWN IMMEDIATE 命令关闭数据库服务器,然后执行以下命令:
SQL>shutdown immediate;
SQL>STARTUP MOUNT;
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;
ORA-12712: new character set must be a superset of old character set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:需使用INTERNAL_USE可以跳过超集的检查
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
ERROR at line 1:
ORA-12721: operation cannot execute when other sessions are active
若报以上错误则:select sid,serial#,username,machine from v$session;查看有哪些SESSION,然后
alter system kill session ‘sid’serial#’ immediate;然后
alter system kill session ’158,7′ immediate;如这样
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;
报错2:插入字段含有&(安特)符号
方法一:
SQL> show define;
define “&” (hex 26)
SQL> set define off;
SQL> show define;
define OFF
这个是Oracle里面用来识别自定义变量的设置,在SQL*PLUS下要将其关闭。
注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。
如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。
方法二:
在SQL语句中将’&’替换成chr(38),因为chr(38)是‘&’的ASCII码
SQL> Select ‘Tom’ || chr(38) || ‘Jerry’ from dual;
方法三:
分拆原来的字符串
SQL> Select ‘Tom’ || ‘&’ || ‘Jerry’ from dual;
报错3:插入字段含有’(单引号)符号
方法一:使用转义字符
SQL > Select ‘test’ || ”” from dual;
注意:这里的””四个单引号是什么意思呢?首先第一个和最后一个都是Oracle中的字符串连接符,这个没有异议。那么第二个’和第三’又表示什么意思呢?第二个’是一个转义字符
第三个’才是我们真正的内容
方法二:
同样是使用转义字符,只不过方式不同而已
SQL > Select ‘test ”’ from dual;
注意:这里的第二个,第三个’就是我们上面方法一中提到的转义符和真正的内容
方法三:
在SQL中将’替换成chr(39),因为chr(39)是’的ASCII码
SQL > Select ‘It’ || chr(39) || ‘fine’ from dual;
报错4:ORA-00001: unique constraint violated
主键有唯一性约束,不能重复插入相同的数值。
原文地址:oracle导入数据报错处理, 感谢原作者分享。

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境