0

0

Oracle数据库入门之函数/类型

php中文网

php中文网

发布时间:2016-06-07 16:18:34

|

1265人浏览过

|

来源于php中文网

原创

Oracle主要数据类型 概述:各种数据库所支持的数据类型大同小异,与标准SQL语言中的数据类型可能略有出入 类型:varchar2:可以在声明字段时设置它的长度上限。而且使用它之后,就不必再考虑空格的存在 若插入的字符串的长度低于长度上限,系统就会自动将其

  oracle主要数据类型

  概述:各种数据库所支持的数据类型大同小异,与标准SQL语言中的数据类型可能略有出入

  类型:varchar2:可以在声明字段时设置它的长度上限。而且使用它之后,就不必再考虑空格的存在

  若插入的字符串的长度低于长度上限,系统就会自动将其缩减为字符串的真实长度

  number(m,n):既可以用来表示整型,也可以表示浮点型。但m不可以超过38。如果n为0或者省略n,就代表它是整数

  date:用来存放日期和时间

  blob:通常是在应用程序中使用到它,而不是在数据库中利用SQL指令直接使用

  比如通过JDBC技术访问数据库,读写blob或clob类型的字段,即读写长的字符串信息等等

  char:它是一种定长的字符类型。在Oracle数据库不区分字符和字符串,它们被统称为字符型或文本型

  所谓定长的字符型是指,插入的字符串若没有达到约定的字段长度,系统就会在字符串尾部自动补空格

  同样,读取时的字段长度永远是声明时的字段长度。而且在比较字符串内容的时候,也需要考虑到空格的过滤

  nchar:它也是定长的字符串类型,它是SQL语言标准中规定的,通常采用Unicode编码来保存不同国家或不同语言的字符

  varchar:SQL标准在定义varchar时并没有保证能够向前和向后兼容,即有可能随着语言标准的修改而产生不兼容的问题

  所以Oracle定义了同varchar型类似的varchar2型。就是为了在Oracle以后的版本中,,都永远支持varchar2类型

  Oracle这么做就是为了确保此类型向前后兼容,以达到能够在Oracle系列数据库中进行数据的导入和导出的目的

  long:它和varchar2的差别在于,它不支持对字符串内容进行检索,即查询时不可以对它的内容进行条件查询

  而varchar2和char、nchar型等等都可以在查询的时候直接检索字符串的内容

  补充:select * from v$nls_parameters;数据库的配置信息以数据表的形式存在,通常称其为关于数据的数据或数据字典

  实际上它查询的是数据字典中的一个视图。其中NLS_CHARACTERSET对应的是当前的数据库字符集

  缺省均为使用数据库字符集。教程中使用的是安装时默认的ZHS16GBK字符集,即汉字占2个字节,英文占1个字节

  而NLS_NCHAR_CHARACTERSET对应的是nchar或nvarchar2类型所采用的辅助字符集,即AL16UTF16字符集

  实际上AL16UTF16是一种16位定长的Unicode编码的字符集。而数据库字符集以及这种国家字符集都可以修改

  但数据库字符集修改后可能会面临很严重的后果,除非是数据库管理员,普通用户不必对这方面进行深究

  数据库中的数据导入导出的时候,如果源数据库和目标数据库所采用的字符集不同,也很容易出问题

  函数

  概述:函数可以认为是能够完成相对独立的功能的一段代码的集合。Oracle函数相当于其它语言中的方法或过程

  Oracle函数可以分为单行函数和多行函数两大类。Oracle函数都是有返回值的

  所谓的单行函数是针对查询结果中的每一行都起作用,都会返回一个结果

  多行函数也就是所谓分组函数,是针对一组查询的记录,或者说多行,返回一个结果

  单行:操作数据项,接受参数并返回处理结果,对每一返回行均起作用,可修改数据类型,可嵌套使用

  单行函数分为字符函数,数值函数,日期函数,转换函数,通用函数

  多行:也称分组函数,即对一组数据进行运算,针对一组数据(多行记录)只能返回一个结果

  多行函数包括avg()、count()、max()、min()、sum()等

  比如select avg(sal), max(sal), min(sal), sum(sal), max(hiredate), min(hiredate) from emp;

  续一:使用Oracle的系统函数中的单行函数可实现诸多功能,如对数据进行计算,控制数据的输出格式

  设置和改变日期的显示格式,进行数据类型转换,使用NVL等函数处理空值,实现IF-THEN-ELSE多路分支逻辑等等

  续二:转换函数不会改变表中数据的字段类型和值。它就相当于将数据复制了一份,所转换的是复制之后的数据

  数据类型转换包括隐含转换和显式转换两种方式,建议使用显式的数据类型转换,确保SQL语句的可靠性

  续三:通用函数适用于包括空值在内的任何类型数据。通常用来实现空值的处理,空值的过滤或设置缺省值等

  通用函数包括nvl()、nvl2()、nullif()、coalesce()、case表达式、decode()等

  嵌套:单行函数可以嵌套使用,嵌套层次无限制。分组函数最多可嵌套两层。嵌套函数的执行顺序是由内到外

  单行比如select empno,lpad(initcap(trim(ename)),10,' ') 姓名, job, sal from emp;

  多行比如select max(avg(sal)) from emp group by deptno;--其实这里再使用分组函数就没有意义了

  说明:通常数据库层面提供的函数,只是进行数据的简单的处理,或者说是只能实现极为常规的功能

  所以就不应该,或者说是不要指望在数据库查询的层面来实现特别复杂的业务逻辑

  如果应用程序的逻辑跟数据库混在一起的话,会不利于代码的维护和更新

  而且也不利于数据库的管理,包括数据移植,数据库导入导出等等

  日期类型

  概述:在计算机操作系统或者各种高级编程语言中,日期通常会被保存成一个长整数,通常记录的是毫秒

  Oracle内部以数字格式存储日期和时间信息:世纪,年,月,日,小时,分钟,秒

  缺省的日期格式是DD—MON—YY。可使用sysdata函数获取当前系统日期和时间

  运算:日期型数据可以直接加或减一个数值,结果认为日期。约定的该数值代表的是相加减的天数

  两个日期型数据可以相减,结果为二者相差多少天。二者不能,因为日期相加是没有意义的

  NVL()函数

  概述:它用于将空值null替换为指定的缺省值,适用于字符、数字、日期等类型数据

  格式:NVL(exp1,exp2)--如果表达式exp1值为null,则返回exp2值,否则返回exp1值

  举例:select empno, ename, sal, comm, sal+nvl(comm,0) from emp;

  select empno, ename, job, nvl(job, 'No job yet') from emp;

  NVL2()函数

  概述:它用于实现条件表达式功能

  格式:NVL2(exp1,exp2,exp3)--如果表达式exp1值不为null,则返回exp2值,否则返回exp3值

  举例:select empno, ename, sal, comm, nvl2(comm, sal+comm, sal) 总收入 from emp;

  NULLIF()函数

  概述:它用于数据等价性比较并根据比较结果返回null或其中一个被比较的数值。实际开发中应用并不是很多

  格式:nullif(exp1,exp2)--如果表达式exp1与exp2的值相等,则返回null,否则返回exp1的值

  举例:select name 原名, nullif(pen_name, name) 化名 from author;

  COALESCE()函数

  概述:它用于实现数据“接合”功能

  格式:coalesec(exp1,exp2,...)--依次考察各参数表达式,遇到非null值即停止并返回该值

  若表达式均为null值,则返回null。通常最后一个表达式都是能确保不是空值的字段

  举例:select empno, ename, sal, comm, coalesec(sal+comm,sal,0) 总收入 from emp;

  CASE表达式

  概述:它用于实现多路分支结构

成新网络商城购物系统
成新网络商城购物系统

使用模板与程序分离的方式构建,依靠专门设计的数据库操作类实现数据库存取,具有专有错误处理模块,通过 Email 实时报告数据库错误,除具有满足购物需要的全部功能外,成新商城购物系统还对购物系统体系做了丰富的扩展,全新设计的搜索功能,自定义成新商城购物系统代码功能代码已经全面优化,杜绝SQL注入漏洞前台测试用户名:admin密码:admin888后台管理员名:admin密码:admin888

下载

  格式:case exp when comparison_exp1 then return_exp1

  [when comparison_exp2 then return_exp2

  when comparison_expn then return_expn

  else else_exp]

  end

  举例:select empno, ename, sal,

  case deptno when 10 then '财务部'

  when 20 then '研发部'

  when 30 then '销售部'

  else '未知部门'

  end 部门

  from emp;

  说明:CASE中的每一个表达式(如deptno,10,财务部等)都可以是复合而成的

  这种对齐方式的书写是为了增加可读性,当然也可以把代码写在同一行上

  其中case到end之间的整体就相当于普通查询中的一个字段,end后面的“部门”是别名

  DEDODE()函数

  概述:和case表达式类似,它也用于实现多路分支结构

  格式:decode(col|expression, search1, result1

  [, search2, result2,...,]

  [, default])

  举例:select empno, ename, sal,

  decode(deptno, 10, '财务部',

  20, '研发部',

  30, '销售部',

  '未知部门')

  部门

  from emp;

  COUNT()函数

  格式:count(*)返回组中总记录数目

  count(exp)返回表达式exp值非空的记录

  count(distinct(exp))返回表达式exp值不重复的、非空的记录数目

  举例:select count(*) from emp;--缺省的情况下,整个表就是一组

  select count(comm) from emp;--返回emp表中comm字段不为空的记录(行)数目

  select count(distinct(deptno)) from emp;--查找deptno值为非空且不重复的记录数目

  分组函数与空值

  概述:分组函数省略列中的空值。可使用NVL()函数强制分组函数处理空值

  举例:select avg(comm) from emp;--等价于sum(comm)/count(comm)

  select sum(comm) from emp;--计算表中非空的comm值的总和

  select avg(nvl(comm,0)) from emp;--等价于avg(nvl(comm,0))/count(*)

  GROUP BY子句

  概述:它用于将表中数据分成若干小组

  格式:select column, group_function(column)

  from table

  [where condition]

  [group by group_by_expression]

  [order by column];

  举例:select deptno, avg(sal) from emp group by deptno;

  说明:出现在SELECT列表中的字段,如果不是包含在组函数中,那么该字段必须同时在GROUP BY子句中出现

  包含在GROPY BY子句中的字段则不必须出现在SELECT列表中。子句执行顺序是where→group by→order by缺省按升序排列

  补充:select deptno, job, avg(sal) from emp group by deptno, job order by deptno desc;--基于多个字段的分组

  select deptno, avg(sal) from emp;--非法

  注意:如果没有GROUP BY子句,SELECT列表中不允许出现字段(单行函数)与分组函数混用的情况

  WHERE中不允许使用分组函数,如select deptno, avg(sal) from emp where avg(sal)>2000 group by deptno;--非法

  这跟子句执行的顺序有关。where子句最先执行,在执行where子句的时候还没有执行过group by子句

  于是程序不知道这是在分组,也不曾计算过avg(sal)的组内平均工资,所以在where子句中不允许使用分组函数

  由于还没有执行过group by子句,所以此时就不确定如何怎么分组以及分多少个组

  所以where子句中只能进行初级过滤。此时可以使用HAVING子句实现对平均工资的过滤

  HAVING子句

  概述:它用于过滤分组

  格式:select column, group_function(column)

  from table

  [where condition]

  [group by group_by_expression]

  [having group_condition]

  [order by column];

  举例:select deptno, job, avg(sal)

  from emp

  where hiredate >= to_date('1981-05-01','yyyy-mm-dd')

  group by by deptno, job

  having avg(sal) > 1200

  order by deptno, job;

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

75

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

17

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

38

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

1

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

3

2026.01.28

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

8

2026.01.28

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

23

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

122

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

52

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.6万人学习

Java 教程
Java 教程

共578课时 | 52.4万人学习

oracle知识库
oracle知识库

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号