目录
2、使用Oracle数据库过程中会出现数据库被锁的情况,该怎么解决?
4、Oracle数据库中如何将一个数据库表的数据添加到另一个数据库表中?
5、Oracle导出.sql文件(含表结构和数据)时报含clob列错误?
6、报错:java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符,怎么解决?
7、报错:java.math.BigDecimal cannot be cast to java.lang.String,怎么解决?
9、SQL语句中使用like与instr进行模糊查询性能比较?
12、plsqldev导入txt或csv文件报错,显示标识符无效?
1、如何解决PLSQL工具中查询数据时乱码显示问题?
两步走:
- 查询一下当前的字符集类型:select userenv('language') from dual; ,如果不是IMPLIFIED CHINESE_CHINA.ZHS16GBK,需要设置环境变量;
- Windows上,我的电脑--右键属性--高级系统设置--高级--环境变量--新建用户变量
变量名:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
重启plsql即可。
2、使用Oracle数据库过程中会出现数据库被锁的情况,该怎么解决?
杀掉当前系统的会话,通过以下三个步骤即可解决被锁:
- 第一步: select object_id,session_id,locked_mode from v$locked_object
- 第二步:select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time
- 第三步: alter system kill session 'sid,serial#‘
注意:用SQL语句向数据库插入数据,执行时一直显示“正在执行...”,是因为未commit提交造成的死锁。
3、Oracle如何查看表建立索引和分区?
参考如下:
SELECT * FROM v_ci_h;
--查看是否使用了索引
select * from user_indexes where table_name=upper('v_ci_h');
--查看是否建立了分区(table_name一定要大写)
select partition_name from user_tab_partitions where table_name='V_CI_H';
4、Oracle数据库中如何将一个数据库表的数据添加到另一个数据库表中?
--例如:将数据库B的表数据按时间查询出后插入到数据库A中
insert into 数据库A.表 select * from 数据库B.表 where to_char(pass_time,'yyyyMMdd')>='20181001'
注意:如果查询的数据量太大会报以下提示:
5、Oracle导出.sql文件(含表结构和数据)时报含clob列错误?
这个问题在项目中遇到了,因为clob类型的pl/sql处理不了,导出含数据的sql文件时会报错!!,可以通过以下方式解决:
6、报错:java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符,怎么解决?
原因:拼写SQL语句时,结尾多了一个 “ ; ”
7、报错:java.math.BigDecimal cannot be cast to java.lang.String,怎么解决?
数据从数据库中取出的,把数据库中的整数转成了BigDecimal 类型,不管是什么类型,它们不能强制转换成String类型的,强制转换会报错,强制转换符在引用类型用于父类转子类。而这些类都实现了toString方法可以通过这个方法转成String类型。
// 数据库 LATITUDE 对应的整数:
Object lat = mapparamfirst.get("LATITUDE");
System.out.println(lat.toString());
// 或者是将返回字段的计算结果使用to_char()函数转化为字符串类型返回
to_char(decode(sum(volte_merge_001),0,0,sum(volte_merge_002)))
"element_fVolteMergeC001",
to_char(sum(volte_merge_001)) "denominator_fVolteMergeC001",
8、SQL语句在数值计算出现分母为0情况?
1. 使用NULLIF函数
NULLIF(expr1,expr2)
- 解释:如果两个表达式不相等,返回第一个 expression1 的值;如果两个表达式相等,返回空值null。
- 注意:可以NULLIF(expr1,null),不可以NULLIF(null,expr2)!!
2. 使用DECODE函数
decode(分母,0,null,分子/分母)
3. 使用case...when...then
case when 分母=0 then NULL else 分子/分母
9、SQL语句中使用like与instr进行模糊查询性能比较?
- like关键字和instr()内建函数区别:
instr(title,'手册')>0 -- 相当于 title like '%手册%'
instr(title,'手册')=1 -- 相当于 title like '手册%'
instr(title,'手册')=0 -- 相当于 title not like '%手册%'
t表中将近有1100万数据,很多时候,我们要进行字符串匹配,在SQL语句中,我们通常使用like来达到我们搜索的目标。但经过实际测试发现,like的效率与instr函数差别相当大。
- 一般来说,在Oracle数据库中,对tb表的name字段进行模糊查询会采用下面两种方式:
select * from tb where name like '%XX%'; select * from tb where instr(name,'XX')>0;
若是在name字段上没有加索引,两者效率差不多,基本没有区别。为提高效率,我们在name字段上可以加上非唯一性索引:
create index idx_tb_name on tb(name);
这样,再使用:
select * from tb where instr(name,'XX')>0;
这样的语句查询,效率可以提高不少,表数据量越大时两者差别越大。但也要顾及到name字段加上索引后DML语句会使索引数据重新排序的影响。
10、PD连接Oracle遇到的问题及导出表结构
连接过程中,出现的问题可以参考下面整理的链接:
- Oracle的ODBC驱动安装、客户端TNS配置、PD连接Oracle过程:
https://blog.csdn.net/u011781521/article/details/78960083
https://www.cnblogs.com/chinas/p/6228245.html
- 无法加载ODBC应用程序驱动,发生14001错误:
https://blog.csdn.net/sandy_shell/article/details/8555820
- 逆向工程生成的表结构中name赋值comment脚本:
' 将name赋值comment
Option Explicit
ValidationMode = True
InteractiveMode = im_Batch
Dim mdl ' the current model
' get the current active model
Set mdl = ActiveModel
If (mdl Is Nothing) Then
MsgBox "There is no current Model "
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
MsgBox "The current model is not an Physical Data model. "
Else
ProcessFolder mdl
End If
Private sub ProcessFolder(folder)
On Error Resume Next
Dim Tab 'running table
for each Tab in folder.tables
if not tab.isShortcut then
tab.name = tab.comment
Dim col ' running column
for each col in tab.columns
if col.comment="" then
else
col.name= col.comment
end if
next
end if
next
Dim view 'running view
for each view in folder.Views
if not view.isShortcut then
view.name = view.comment
end if
next
' go into the sub-packages
Dim f ' running folder
For Each f In folder.Packages
if not f.IsShortcut then
ProcessFolder f
end if
Next
end sub
执行脚本前:
执行后:
11、Navicat工具无法连接oracle,怎么解决?
navicat是一款连接数据库的工具。
下载instantclient-basic-win-x86-64-11.2.0.1.0压缩包(即免安装的oracle客户端)并解压到oracle文件夹(可以是其他任意文件夹)下,在navicat的工具--选项--环境里配置解压后的orc.dll文件路径,配置好后重启即可。
12、plsqldev导入txt或csv文件报错,显示标识符无效?
一般的导入步骤:tools ---> Text Importer--->【Data from Textfile】--选择需要导入的csv或txt文件 --->【Data to Oracle】-- 【general】:选择owner和table -- 【fields】:遇到field类型为XXXX__NUMBER_ 的,通过下拉框修改为:XXXX (NUMBER)即可 ---> import 。然而标红的部分未修改时会导入失败,报以下错误:
【持续更新中】