Oracle实际需要用到但常常被忽略的函数

devtools/2024/10/15 16:20:23/

1、Oracle中nvl()与nvl2()函数

函数nvl(expression1,expression2)根据参数1是否为null返回参数1或参数2的值;
函数nvl2(expression1,expression2,expression3)根据参数1是否为null返回参数2或参数3的值

【函数格式】:nvl(expression1,expression2)

若expression1值为null,则该函数返回expression2;
若expression1值不为null,则该函数返回expression1;
若expression1、expression2的值均为null,则该函数返回null。
【特别说明】:参数expression1和expression2可以是字符型、数字型或日期型,但参数expression1与expression2的类型必须一致

【函数格式】:nvl2(expression1,expression2,expression3)

若expression1值不为null,则该函数返回expression2值;
若expression1值为null,则该函数返回expression3值;
若expression1、expression2、expression3值均为null,则该函数返回null。
【特别说明】:
expression1的类型不需要与expression2和expression3的类型保持一致;
expression2与expression3的类型尽量保持一致,若不一致,当expression1为null时,则expression3会自动转换为expression2的类型,若两个数据类型之间无法转换,则会报错。

2、ALTER SESSION ENABLE PARALLEL DML

execute immediate ‘alter session enable parallel dml’; --修改会话并行DML,启用并行DML

并行处理,一般为CPU的倍数如:4,8等,在执行类型SQL必须先运行:alter session enable parallel dml

3、DBMS_STATS.GATHER_TABLE_STATS详解

作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信息收集,包含该表的自身-表的行数、数据块数、行长等信息;列的分析–列值的重复数、列上的空值、数据在列上的分布情况;索引的分析-索引页块的数量、索引的深度、索引聚合因子)

DBMS_STATS.GATHER_TABLE_STATS的语法如下:

DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2,
tabname VARCHAR2, partname VARCHAR2,
estimate_percent NUMBER, block_sample BOOLEAN, method_opt
VARCHAR2, degree NUMBER, granularity VARCHAR2,
cascade BOOLEAN, stattab VARCHAR2, statid
VARCHAR2, statown VARCHAR2, no_invalidate BOOLEAN,
force BOOLEAN);

参数说明:

ownname:要分析表的拥有者

tabname:要分析的表名.

partname:分区的名字,只对分区表或分区索引有用.

estimate_percent:采样行的百分比,取值范围[0.000001,100],null为全部分析,不采样. 常量:DBMS_STATS.AUTO_SAMPLE_SIZE是默认值,由oracle决定最佳取采样值.

block_sapmple:是否用块采样代替行采样.

method_opt:决定histograms信息是怎样被统计的.method_opt的取值如下(默认值为FOR ALL COLUMNS SIZE AUTO):

for all columns:统计所有列的histograms.

for all indexed columns:统计所有indexed列的histograms.

for all hidden columns:统计你看不到列的histograms

for columns SIZE | REPEAT | AUTO | SKEWONLY:统计指定列的histograms.N的取值范围[1,254]; REPEAT上次统计过的histograms;AUTO由oracle决定N的大小;SKEWONLY multiple end-points with the same value which is what we define by "there is skew in thedata

degree:决定并行度.默认值为null.

granularity:Granularity of statistics to collect ,only pertinent if the table is partitioned.

cascade:是收集索引的信息.默认为FALSE.

stattab:指定要存储统计信息的表,statid如果多个表的统计信息存储在同一个stattab中用于进行区分.statown存储统计信息表的拥有者.以上三个参数若不指定,统计信息会直接更新到数据字典.

no_invalidate: Does not invalidate the dependent cursors if set to TRUE. The procedure invalidates the dependent cursors immediately if set to FALSE.

force:即使表锁住了也收集统计信息.

例子:

execute dbms_stats.gather_table_stats(ownname => 'owner',tabname => 'table_name' ,estimate_percent => null ,method_opt => 'for all indexed columns' ,cascade => true);

总结:
在Oracle数据库中,DBMS_STATS包是用于收集和优化数据库对象统计信息的工具。其中,GATHER_TABLE_STATS过程是用来收集指定表的统计信息。这些统计信息对于Oracle优化器来说至关重要,因为它们帮助优化器选择最优的执行计划来执行SQL语句。

实际案例:

DBMS_STATS.GATHER_TABLE_STATS('YPREPORT','T_F_CPMAIN_T90',CASCADE=>TRUE,NO_INVALIDATE=>FALSE,DEGREE=>8);

含义:
'YPREPORT':这是表所在的模式(Schema)名称。在Oracle中,模式是一组数据库对象的集合,包括表、视图、索引等。这里是用户名
'T_F_CPMAIN_T90':这是要收集统计信息的表名。
CASCADE=>TRUE:这个参数指定是否同时收集该表相关索引和列的统计信息。当设置为TRUE时,除了收集表的统计信息外,还会收集所有相关索引和列的统计信息。这对于确保优化器拥有完整的信息来制定执行计划非常重要。
NO_INVALIDATE=>FALSE:这个参数决定了在收集统计信息后是否使依赖于此表的SQL语句的执行计划失效。当设置为FALSE时(默认值),收集统计信息后会使依赖于此表的SQL语句的执行计划失效,从而迫使优化器在下次执行这些SQL语句时重新生成执行计划。这有助于确保SQL语句能够利用最新的统计信息来执行。

4、GREATEST函数

GREATEST函数 取最大值
SELECT GREATEST(1, 5, 2, 4, 3) FROM DUAL;返回最大值5
需要注意的是,GREATEST函数只能用于比较数值、日期或字符类型的值,并且所有参数的类型必须相同。如果传递的参数类型不同,Oracle将尝试隐式转换类型,但是可能会产生错误结果。


http://www.ppmy.cn/devtools/126240.html

相关文章

mysql 慢查询日志slowlog

慢查询参数 slow log 输出示例 # Time: 2024-08-08T22:39:12.80425308:00 #查询结束时间戳 # UserHost: root[root] localhost [] Id: 83 # Query_time: 2.331306 Lock_time: 0.000003 Rows_sent: 9762500 Rows_examined: 6250 SET timestamp1723127950; select *…

Qt(10.11)

数据表 源代码&#xff1a; #include "widget.h" #include "ui_widget.h" #include<QMessageBox>//消息对话框 #include<QDebug> #include<QSqlRecord> Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-&g…

亚洲 Web3 市场:Q3 监管变化与市场驱动力探析

概述&#xff1a; 亚洲的 Web3 市场在2024年第三季度继续表现出强劲增长势头。得益于技术精通的人口基础、政府的积极政策导向和企业的大规模参与&#xff0c;韩国、日本、越南等国家已然走在行业前沿。此外&#xff0c;随着越来越多的监管框架落地&#xff0c;区块链创新不断…

Oracle 的 OCP 与 MySQL 的 OCP 的区别

事务开始与提交&#xff08;以 Java 代码中的事务操作为例&#xff09; Oracle&#xff08;在 Java 中使用 JDBC 进行事务操作&#xff09; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;public cla…

Apache POI实现数据以excel文件的形式导出

Apache POI介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 应用场景&#xff1a;银行网银系统…

echarts圆环图中间加文字

关键代码在下面&#xff0c;直接添加 title 即可 title: {show: true,text: 100%, //图中间的值x: center, //居中y: center,textStyle: {fontSize: 15,color: pink,fontWeight: normal,fontWeight:800}}, 实操请戳这里&#xff01;&#xff01;&#xff01;&#xff01;

Elasticsearch的安装与配置

注意&#xff1a;elasticsearch 禁止安装在/root路径下&#xff01; 1、创建用户组 groupadd elastic 2、创建用户 useradd es -d /home/es -g elastic echo es | passwd es --stdin 3、给新创建的用户进行授权 chown -R es:elastic /home/es chmod -R 775 /home/es 4…

python爬虫--某动漫信息采集

python爬虫--tx动漫 一、采集主页信息二、采集详情页信息三、代码供参考一、采集主页信息 略。 二、采集详情页信息 如上图所示,使用xpath提取详情页的标题、作者、评分、人气、评论人数等数据。 三、代码供参考 import csv import time import random import requests fr…