工作中的Oracle问题
# 12.2.0.1与12.1.0.2数据库版本差异
# table()函数
假设我有个function返回一个集合,我希望把它当做表来查询。
在12.1需要加上table()
select * from table(function(param1,param2));
1
12.2则会自动识别,省略了table函数
select * from function(param1,param2);
1
# 标识符限制30字
12.2以前的版本,标识符限制了30字符。查到资料,12.2将限制放宽到128字节,注意是字节。
--在Oracle 12.1 版本会报错
select 1 as abcdefghijklnmopqrstuvwxyzzzzzz from dual;
1
2
2
# ORA-03113
修改这两个参数 alter system set "_complex_view_merging"=false scope=both sid=''; alter system set "_OPTIMIZER_COST_BASED_TRANSFORMATION"= OFF scope=both sid='';
# order by 影响性能
工作中存在一些sql,导致查询特别慢。
原因是没有走sql。如果想要走sql,那就有两种办法
- 在where子句中添加 order by 需要的字段
- 在查询时,添加hint写法,强制使用索引
1、如果order by columnA,那么在where查询条件中添加条件columnA=value,则oracle内部会过滤order by排序,直接用索引(可以通过execution plan查看)。
2、如果order by columnA,columnB,那么在where查询条件中添加条件columnA=value1,columnB=value1,则oracle内部会过滤order by排序,直接用索引(可以通过execution plan查看)。
3、如果order by columnA,但是在where查询条件中没有columnA=value,那么在查询的时候添加hint *+ INDEX_FFS(columnA) */,则oracle内部会过滤order by排序,直接用索引(可以通过execution plan查看)。
上次更新: 2023/04/10, 17:41:57