Oracle常用函数记录
Oracle函数
--schema:hcf
--不带任何参数
http://www.cnblogs.com/wuyisky/archive/2010/05/11/oracle_function.html
--1. 单行函数
--常用的单行函数有:
--字符函数:对字符串操作,字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。
ASCII(X) --返回字符X的ASCII码
SELECT ASCII('a') FROM dual;
CONCAT(X,Y) --连接字符串X和Y
SELECT CONCAT('Hello','world') FROM dual;
INSTR(X,STR[,START][,N) ---从X中查找str,可以指定从start开始,也可以指定从n(x中的字符)开始,输出n是x中的第几位
SELECT INSTR('Hello world','or') FROM dual;
LENGTH(X) ---返回X的长度
SELECT LENGTH('Hello') FROM dual;
LOWER(X) ---X转换成小写
SELECT LOWER('Hello') FROM dual;
UPPER(X) ---X转换成大写
SELECT UPPER('hello') FROM dual;
LTRIM(X[,TRIM_STR]) ---把X的左边截去trim_str字符串,缺省截去空格
SELECT LTRIM('=Hello=','=') FROM dual;
TRIM([TRIM_STR FROM]X) --把X的两边截去trim_str字符串,缺省截去空格
SELECT TRIM('='FROM'=Hello=') FROM dual;
REPLACE(X,old,new) --在X中查找old,并替换成new
SELECT REPLACE('ABCDE','CD','AAA')FROM dual;
SUBSTR(X,start[,length]) --返回X的字串,从start处开始,截取length个字符,缺省length,默认到结尾
SELECT SUBSTR('ABCDE',2,3) FROM dual;
--数字函数:数字函数接受数字参数,参数可以来自表中的一列,也可以是一个数字表达式。
ABS(X) --X的绝对值
select ABS(-3) from dual;
ACOS(X) --X的反余弦
select ACOS(1) from dual;
COS(X) --余弦
select COS(1) from dual;
CEIL(X) --大于或等于X的最小值
select CEIL(5.4) from dual;
FLOOR(X) --小于或等于X的最大值
select FLOOR(5.8) from dual;
LOG(X,Y) ---X为底Y的对数
select LOG(2,4) from dual;
MOD(X,Y) --X除以Y的余数
select MOD(8,3) from dual;
POWER(X,Y) ---X的Y次幂
select POWER(2,3) from dual;
ROUND(X[,Y]) --X在第Y位四舍五入
select ROUND(3.456,2) from dual;
SQRT(X) --X的平方根
select SQRT(4) from dual;
TRUNC(X[,Y]) --X在第Y位截断
select TRUNC(3.456,2) from dual;
1. ROUND(X[,Y]),四舍五入。
在缺省 y 时,默认 y=0;比如:ROUND(3.56)=4。
y 是正整数,就是四舍五入到小数点后 y 位。ROUND(5.654,2)=5.65。
y 是负整数,四舍五入到小数点左边|y|位。ROUND(351.654,-2)=400。
2. TRUNC(x[,y]),直接截取,不四舍五入。
在缺省 y 时,默认 y=0;比如:TRUNC (3.56)=3。
Y是正整数,就是四舍五入到小数点后 y 位。TRUNC (5.654,2)=5.65。
y 是负整数,四舍五入到小数点左边|y|位。TRUNC (351.654,-2)=300。
--日期函数:日期函数对日期进行运算。常用的日期函数有:
--ADD_MONTHS(d,n),在某一个日期 d 上,加上指定的月数 n,返回计算后的新日期
SELECT SYSDATE,add_months(SYSDATE,5) FROM dual;
--LAST_DAY(d),返回指定日期当月的最后一天
SELECT SYSDATE,last_day(SYSDATE) FROM dual;
--ROUND(d[,fmt]),返回一个以 fmt 为格式的四舍五入日期值, d 是日期, fmt 是格式模型。默认 fmt 为 DDD,即月中的某一天。
如果 fmt 为“YEAR”则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下一年。
如果 fmt 为“MONTH”则舍入到某月的 1 日,即前月舍去,后半月作为下一月。
默认为“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第二天。
如果 fmt 为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日
SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,'day'),ROUND(SYSDATE,'month'),ROUND(SYSDATE,'year') FROM dual;
--EXTRACT(fmt FROM d),提取日期中的特定部分
SELECT SYSDATE "date",EXTRACT(YEAR FROM SYSDATE)"year",
EXTRACT(MONTH FROM SYSDATE)"month",
EXTRACT(DAY FROM SYSDATE)"day",
EXTRACT(HOUR FROM SYSTIMESTAMP)"hour",
EXTRACT(MINUTE FROM SYSTIMESTAMP)"minute",
EXTRACT(SECOND FROM SYSTIMESTAMP)"second"
FROM dual;
--转换函数,转换函数将值从一种数据类型转换为另外一种数据类型。常见的转换函数有:
--TO_CHAR(d|n[,fmt]),把日期和数字转换为制定格式的字符串。Fmt是格式化字符串
SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS')"date" FROM dual;
SELECT TO_CHAR(-123123.45,'L9.9EEEEPR')"date" FROM dual;
--TO_DATE(X,[,fmt]),把一个字符串以fmt格式转换成一个日期类型
--TO_NUMBER(X,[,fmt]),把一个字符串以fmt格式转换为一个数字
SELECT TO_NUMBER('-$12,345.67','$99,999.99')"num" FROM dual;
--其它单行函数
--NVL(X,VALUE),如果X为空,返回value,否则返回X
select id,nvl(addr,'上海') from addr_c where id=3;
--NVL2(x,value1,value2),如果x非空,返回value1,否则返回value2
select id,nvl2(addr,'上海','茂名') from addr_c where id=1;
select id,nvl2(addr,'上海','茂名') from addr_c where id=3;
--聚合函数,聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值等。
--sum函数
SELECT SUM(sal) FROM emp;
--AVG函数下的分组查询
SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO;
--MIN、MAX ,最小值、最大值,MIN(表达式)、MAX(表达式)
--COUNT,数据统计,COUNT(表达式)
--自定义函数
--没有参数的函数
create or replace function get_user return varchar2 is
v_user varchar2(50);
begin
select username into v_user from user_users;
return v_user;
end get_user;
--测试 方法一
select get_user from dual;
--方法二
SQL> var v_name varchar2(50)
SQL> exec :v_name:=get_user;
PL/SQL 过程已成功完成。
SQL> print v_name
方法三
SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user);
--带有IN参数的函数
create or replace function get_empname(v_id in number) return varchar2 as
v_name varchar2(50);
begin
select name into v_name from employee where id = v_id;
return v_name;
exception
when no_data_found then
raise_application_error(-20001, '你输入的ID无效!');
end get_empname;
create table employee(id int,name varchar2(50));
-- 建立无参数的函数
CREATE OR REPLACE FUNCTION cur_datetime
RETURN VARCHAR2
IS
BEGIN
RETURN TO_CHAR(sysdate,
'YYYY"年"MM"月"DD"日"HH24″时"MI"分"SS"秒"');
END;
--建立带有输入参数的函数
CREATE OR REPLACE FUNCTION get_sal(name VARCHAR2)
RETURN NUMBER
AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM emp WHERE upper(ename)=upper(name);
RETURN v_sal;
END;
-- 建立带有输出参数的函数
CREATE OR REPLACE FUNCTION get_info
(eno NUMBER,title OUT VARCHAR2) RETURN VARCHAR2
AS
name emp.ename%TYPE;
BEGIN
SELECT ename,job INTO name,title FROM emp
WHERE empno=eno;
RETURN name;
END;
-- 建立带有输入输出参数的函数
CREATE OR REPLACE FUNCTION get_upd_info
(eno NUMBER,sal_chg IN OUT NUMBER) RETURN VARCHAR2
AS
name emp.ename%TYPE;
BEGIN
UPDATE emp SET sal=sal+sal_chg WHERE empno=eno
RETURNING ename,sal INTO name,sal_chg;
RETURN name;
END;
-- 建立结果缓存函数
CREATE OR REPLACE FUNCTION get_name1(no VARCHAR2)
RETURN NUMBER RESULT_CACHE RELIES_ON(emp)
AS
v_name emp.ename%TYPE;
BEGIN
SELECT ename INTO v_name FROM emp WHERE empno=no;
RETURN v_name;
END;
--调用无参数的函数
BEGIN
dbms_output.put_line(SYSDATE);
END;
--调用带有输入参数的函数
BEGIN
dbms_output.put_line('工资:'||get_sal('&name'));
END;
--调用带有输出参数的函数
DECLARE
v_name emp.ename%TYPE;
v_job emp.job%TYPE;
BEGIN
v_name:=get_info(&eno,v_job);
dbms_output.put_line('姓名:'||v_name||',岗位:'||v_job);
END;
--调用带有输入输出参数的函数
DECLARE
v_empno emp.empno%TYPE;
v_name emp.ename%TYPE;
v_salchg emp.sal%TYPE;
BEGIN
v_empno:=&eno;
v_salchg:=&incre;
v_name:=get_upd_info(v_empno,v_salchg);
dbms_output.put_line('姓名:'||v_name||',新工资:'||v_salchg);
END;
--使用位置传递为参数传递变量和数据
SELECT get_sal('&name') 工资 FROM dual;
-- 19-11:使用名称传递为参数传递变量和数据
VAR salary NUMBER
EXEC :salary:=get_sal(name=>'&name')
-- 19-12:使用组合传递为参数传递变量和数据
VAR name VARCHAR2(10)
VAR sal_chg NUMBER
EXEC :sal_chg:=200
EXEC :name:=get_upd_info(&eno,:sal_chg)
PRINT name sal_chg
--在sql语句中调用pl/sql函数
SELECT get_sal(name=>'scott') salary FROM dual;
--使用异常处理
CREATE OR REPLACE FUNCTION get_sal1(name VARCHAR2)
RETURN NUMBER
AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM emp
WHERE upper(ename)=upper(name);
RETURN v_sal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,'该雇员不存在');
END;
/
-- 使用纪录类型作为返回类型
CREATE OR REPLACE FUNCTION get_info1
(eno NUMBER) RETURN emp%ROWTYPE
IS
emp_record emp%ROWTYPE;
BEGIN
SELECT * INTO emp_record FROM emp WHERE empno=eno;
RETURN emp_record;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000,'该雇员不存在');
END;
/
DECLARE
emp_record emp%ROWTYPE;
BEGIN
emp_record:=get_info(&eno);
dbms_output.put_line('姓名:'||emp_record.ename||',部门号:'||emp_record.deptno);
END;
/
--使用集合类型作为返回类型
CREATE OR REPLACE TYPE ename_table_type IS TABLE OF VARCHAR2(10);
/
CREATE OR REPLACE FUNCTION get_name
(dno NUMBER) RETURN ename_table_type IS
ename_table ename_table_type;
BEGIN
SELECT ename BULK COLLECT INTO ename_table FROM emp WHERE deptno=dno;
RETURN ename_table;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20099,'该部门不存在');
END;
/ ---没创建成功
DECLARE
ename_table ename_table_type;
BEGIN
ename_table:=get_name(&dno);
FOR i IN 1..ename_table.COUNT LOOP
dbms_output.put_line('姓名:'||ename_table(i));
END LOOP;
END;
/
--删除函数
DROP FUNCTION get_name;
--:显示编译错误
SHOW ERRORS
--确定函数状态
SELECT object_name FROM user_objects WHERE status='INVALID' AND object_type='FUNCTION';
-- 编译函数
ALTER FUNCTION get_info COMPILE;
--查看函数代码
SELECT text FROM user_source WHERE name='GET_INFO';
http://blog.csdn.net/smartsmile2012/article/details/8242841
Oracle常用函数记录的更多相关文章
- 《ORACLE数据库管理与开发》第三章学习之常用函数记录
<ORACLE数据库管理与开发>第三章学习之常用函数记录 注:文章中的*代表所要操作的列名 1.lower(*)/upper(*),将此列下的值转为小写/大写 2.initcap(*):把 ...
- Oracle常用函数
前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...
- oracle常用函数整理
oracle常用函数整理 1.绝对值.取余.判断数值正负函数 绝对值:ABS(n) 示例: SELECT ABS(100),ABS(-100),ABS('100') FROM ...
- ORACLE常用函数的使用方法
ORACLE常用函数的使用方法 1. 字符串函数 (1) length(); 获取字符长度SELECT LENGTH('中国') FROM PLATFORM_METAINFO_TABLES WHERE ...
- SQL操作数据——SQL组成,查询基础语法,where,Oracle常用函数等
SQL组成 DML数据操作语言 DCL数据控制语言 DQL数据查询语言 DDL数据定义语言 查询基础语法 记录筛选 where 子句 记录筛选 where 子句 实例练习 实例练习 Select语句中 ...
- Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...
- oracle常用函数总结(二)
之前也有写过“oracle常用函数总结(一)”,为了尽量找全常见oracle函数,笔者特意查找了相关资料来作为参考,下边给大家罗列出来,部分和之前有重复的,希望能帮到大家! 列举了31个函数和1个分组 ...
- oracle常用函数总结
Oracle常用函数总结 ---oracle常用函数-----一.数值型常用函数----取整数--select floor(10.1) from dual;--将n四舍五入,保留小数点后m位(默认情况 ...
- oracle常用函数积累
--oracle常用函数积累-- --1.字符串长度:LENGTH ,语法: CONCAT(string) --示例 select LENGTH('AA_BB') from dual;--结果:5 - ...
随机推荐
- 在Spring中使用嵌入式数据库-H2
Spring3以后开始支持嵌入式数据库,嵌入式数据库目前在市面上有好多种,HSQL,DERBY,H2...今天就主要讲一下h2的使用 对于一个数据库产品来说,主要就是如何存储数据和读取数据了.所谓嵌入 ...
- C++->二进制文件流的输入输出
C++->文件流的输入输出 1.书本里以“简单事务处理”为例子,解析二进制输入输出文件流的read和write函数的使用,以及输入输出文件流 过程中指针的捕获.定位,文件流位置的判断,二进制文件 ...
- axios的数据拦截(拦截器)
大家在开发项目中是否遇到过数据延迟,举个例子 你点某个功能 会有 1-2s的延迟,这1-2s可能会在你的页面显示一个一直转着圈圈的动画,不知道有没有小伙伴还不知道这个功能是如何实现的呢?其实在一个项目 ...
- Spring学习笔记-Spring之旅-01
使用Spring简化JAVA开发 Spring的四种关键策略: ●基于POJO的轻量级和最小侵入式编程: ●通过依赖注入(DI)和面向接口实现松耦合: ●基于切面(AOP)和惯例进行声明式编程. ●通 ...
- 如何查看oracle当前连接数,会话数
第一步,在cmd命令行,输入sqlplus 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 SQL> show parameter processes NA ...
- java8的ConcurrentHashMap为何放弃分段锁,为什么要使用CAS+Synchronized取代Segment+ReentrantLock
原文地址:https://cloud.tencent.com/developer/article/1509556 推荐一篇 ConcurrentHashMap 和 HashMap 写的比较的的文章 j ...
- solr 对于 关键字的特殊处理
public static String transformMetachar(String input){ StringBuffer sb = new StringBuffer(); ...
- TCL 字典
https://www.yiibai.com/tcl/tcl_dictionary.html 词典是用于值映射到建的布置. 常规字典的语法: dict set dictname key value ...
- 【Linux】iptables相关实践,原理及参数解释
1.禁止指定IP地址的主机进行连接 iptables -I INPUT -s .***.***. -j DROP 2.解除禁止指定IP地址的主机进行连接 iptables -D INPUT -s .* ...
- JS高级---遍历DOM树
遍历DOM树 第一个函数: 给我根节点, 我会找到所有的子节点: forDOM(根节点) 获取这个根节点的子节点 var children=根节点的.children 调用第二个函数 第二个 ...