Oracle中的其他常用函数
DECODE
语法:DECODE(base_expr,comparel,valuel,Compare2,value2,…default)
功能:把base_expr与后面的每个compare(n)进行比较,如果匹配返回相应的value(n).如果没有发生匹配,则返回default,每个valuel数据类型必须一致,如果没有default则返回null.*/
select decode(GRADE,1,'lowst',2,'low',3,'mid',4,'high',5,'highest','未知') LVL from scott.salgrade;
LEAST
语法:LEAST(expr1[,expr2]…)
功能:计算参数中最小的表达式.所有表达式的比较类型以expr1为准,比较字符的编码大小.
使用位置:过程性语言和SQL语句.*/
select least('AA','AB','AC') V1,least('啊','安','天') V2 from dual;
NULLIF
语法:NULLIF(expr1,expr2) ->相等返回NULL,不等返回expr1
功能:9i新增,用于比较表达式expr1和expr2,相等返回null,否则返回expr1.*/
select ENAME,nullif(SAL,COMM) V1,NULLIF(TO_CHAR(HIREDATE,'yyyy'),'1981') V2 from SCOTT.EMP;
NVL
语法:NVL(expr1,expr2)
功能:用于将NULL转变为实际值,如果expr1是NULL,那么返回expr2,否则返回expr1,expr1、expr2两者必须为同类型或expr2可以隐式转换为expr1,否则会报错.*/
select ENAME,nvl(COMM,0) V from SCOTT.EMP;
SELECT NVL(to_date('2023-03-10','yyyy-mm-dd')-sysdate,SYSDATE) V FROM dual;
NVL2
语法:NVL2(expr1,expr2,expr3)
功能:9i新增,expr1不为NULL,返回expr2;expr1为NULL,返回expr3,expr1可以是任意数据类型;expr2与expr3可以是除LONG外的任意数据类型,但需要类型一致或expr3可以隐式转换为expr2.*/
select ENAME,nvl2(COMM,SAL+COMM,SAL) V from SCOTT.EMP;
SELECT NVL2(to_date('2023-03-10','yyyy-mm-dd'),sysdate-to_date('2023-03-10','yyyy-mm-dd'),sysdate) V FROM dual;
OVER
语法:sum/count/row_number over( partition by XXX order by XXX )
功能:此函数为分析函数,常与其他聚合函数配合使用
使用位置:过程性语言和SQL语句*/
SYS_CONTEXT
语法:sys_coniext('context','attribute')
功能:该函数用于返回应用上下文的特定属性值,获得系统信息,其中context为上下文名,而attribute为应用上下文名,此函数可以得到oracle主机及客户端的信息.*/
SELECT SYS_CONTEXT('USERENV','TERMINAL') 客户端名称
,SYS_CONTEXT('USERENV','LANGUAGE') 客户端语言
,SYS_CONTEXT('USERENV','LANG') 语言简记
,SYS_CONTEXT('USERENV','SESSIONID') 当前会话标识
,SYS_CONTEXT('USERENV','INSTANCE') 当前实例
,SYS_CONTEXT('USERENV','ENTRYID') 会话入口标识
,SYS_CONTEXT('USERENV','ISDBA') DBA角色
,SYS_CONTEXT('USERENV','NLS_TERRITORY') 地区
,SYS_CONTEXT('USERENV','NLS_CURRENCY') 货币
,SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar
,SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') 时间格式
,SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') 时间语言
,SYS_CONTEXT('USERENV','NLS_SORT') nls_sort
,SYS_CONTEXT('USERENV','CURRENT_USER') current_user
,SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid
,SYS_CONTEXT('USERENV','SESSION_USER') session_user
,SYS_CONTEXT('USERENV','SESSION_USERID') session_userid
,SYS_CONTEXT('USERENV','PROXY_USER') proxy_user
,SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid
,SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain
,SYS_CONTEXT('USERENV','DB_NAME') 数据库名称
,SYS_CONTEXT('USERENV','HOST') 客户端完整名称
,SYS_CONTEXT('USERENV','OS_USER') 客户端用户
,SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name
,SYS_CONTEXT('USERENV','IP_ADDRESS') 客户端IP地址
,SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') 网络协议
,SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id
,SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id
,SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') uthentication_type
,SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_data
FROM DUAL;
SYS_DBURIGEN
语法:SYS_DBURIGEN(column)
功能:9i新增,根据列或属性生产类型为DBUriType的URL.*/
select SYS_DBURIGEN(ename) V from scott.emp;
SYS_GUID
语法:SYS_GUID()
功能:该函数用于生产类型为RAW的16字节的唯一标识符,每次调用该函数都会发生不同的RAW数据.*/
select SYS_GUID() V from DUAL;
SYS_TYPEID
语法:SYS_TYPEID(object_type_value)
功能:该函数用于返回唯一的类型ID值.*/
select name,SYS_TYPEID(value(p)) from scott.emp p;
SYS_XMLAGG
语法:SYS_XMLAGG(expr[,fmt])
功能:9i新增,用户汇总所有XML文档,并生成一个XML文档.*/
select SYS_XMLAGG(sys_xmlgen(ename)) V from scott.emp p;
SYS_XMLGEN
语法:SYS_XMLGEN(expr[,fmt])
功能:9i新增,根据数据库表的行和列生成一个XMLType实例.*/
select sys_xmlgen(ename) V from scott.emp p;
USER
语法:USER
功能:取得当前oracle用户的名字,返回的结果是一个VARCHAR2型字符串.
使用位置:过程性语言和SQL语句.*/
select user from dual;
USERENV
语法:USERENV(option)
功能:根据参数option,取得一个有关当前会话信息的VARCHAR2数值.option同SYS_CONTEXT()
使用位置:过程性语言和SQL语句.*/
select userenv('terminal') HOST,userenv('sessionid') SSID,userenv('language') LANG,userenv('isdba') ISDBA,userenv('CLIENT_INFO') CL_INFO from dual;
VSIZE
语法:VSIZE(value)
功能:获得value的内部表示的字节数.如果value是NULL,结果是NULL.
使用位置:SQL语句.*/
select vsize(user),user from dual;
XMLAGG
语法:XMLAGG(XMLType_instance [order by sort_list])
功能:9i新增,用于汇总多个XML块,并生成XML文档.*/
select xmlagg(xmlelement("employee",ename||' '||sal)) V from scott.emp where deptno=10;
XMLCOLATTVAL
语法:XMLCOLATTVAL(value_expr1[,value_expr2]…)
功能:9i新增,用于生成XML块,并增加”column”作为属性名.*/
select xmlelement("emp", XMLCOLATTVAL(ename,sal)) V from scott.emp where deptno=10;
XMLCONCAT
语法:XMLCONCAT(XMLType_instance1[,XMLType_instance2]…)
功能:9i新增,用于连接多个XMLType实例,并生成一个新的XMLType实例.*/
select XMLCONCAT(xmlelement("ename",ename), xmlelement("sal",sal)) V from scott.emp where deptno=10;
XMLELEMENT
语法:XMLELEMENT(identifier[,xml_attribute_clause][,value_expr])
功能:9i新增,用于返回XMLType实例,其中参数identifier指定元素名,参数xml_attribute_clause指定元素属性子句,参数value_expr指定元素值.*/
select XMLELEMENT("emp",xmlattributes(empno as "id",ename,job,sal)) V from scott.emp;
XMLFOREST
语法:XMLPOREST(value_expr1[,value_expr2]…)
功能:9i新增,用于返回XML块.*/
select xmlelement("EMPLOYEE", XMLFOREST(ename,sal)) V from scott.emp where deptno=10;