Oracle 数据

简介: Oracle 数据

一.数据类型

A.字符串类型

定义:

字符串数据类型还可以依据存储空间分为固定长虔类型(CHAR) 和可变长度类型( VARCHARNVARCHAR2)两种

a1.char

分类:

CHAR类型:定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR (12)<br/>总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指<br/>定CHAR长度,默认为1

a2.nchar:

根据字符集而定的固定长度字符串,用于存储固定长度的字符串,一个空间占用2个字节,最多存储2000个字节,即:nchar(1000),注意这里的1000表示字符数

a3.varchar2(常用)

变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多<br/>可以存储4,000字节的信息 (nvarchar2) 这是一个包含UNICODE格式数据的变长字符串。NVARCHAR2 最多可以存储4,000<br/>字节的信息

a4.四种字符串比较

 

| 类型         | 可变长度        | 一个空间占用字节数   |  最大字节数(bytes)     | 适用场景               |
| CHAR         | 否           | **1**                  | 2000、 char(2000)         | 定长:英文、数字           |
| NCHAR        | 否           | **2**                  | 2000, nchar(1000)         | 定长:中文                 |
| **VARCHAR2** | **是**       | **1**                  | **4000, varchar2(40000)** | **变长:英文、数字、中文** |
| NCARCHAR2    | 是           | **2**                  | 4000, ncarchar2(2000)     | 变长:中文                 |

注意:

1. 对于中文,在这四种类型中存储,都是占2个或2个以上字节;

2. 对于英文或数字,在 CHAR 和 VARCHAR2 中占一个字节,在 NCHAR 和 NVARCHAR2 中占两个字节。

B.数字类型

b1.定义:

number 类型是 Oracle 中常用的数据类型,即可以用于存储整数,也可以存储小数,是一个非常有意思的数据类型。

number 是一个可变长度的数据类型,并且始终保持四舍五入的原则。

b2.语法

number 可以指定两个参数 number(p,s);
p表示有效位,从左边第一个非0的数字开始数,到结尾的长度,取值范围:1 ~ 38;
s表示小数位,取值范围:-84 ~ 127。
注意:通常情况下(需要整数位时),应该 p > s,例如:
1. number(3,2) 只能存储:0.01 ~ 9.99 和 -0.01 ~ -9.99
2. number(3,3) 只能存储:0.001 ~ 0.999 和 -0.001 ~ -0.999
3. number(2,3) 只能存储:0.001 ~ 0.099 和 -0.001 ~ -0.099
4. number 可以表示的数值范围:-1.0e-130 ~ 1.0e+126,占用空间为1 ~ 22 个字节。

b3.举例

| **范围**     | **插入值1** | **结果** | **插入值2** | **结果** |
| ------------ | ----------- | -------- | ----------- | -------- |
| number(5,2)  | 23.56       | 23.56    | 0.008       | 0.01     |
| number(4,3)  | 123.45      | 报错     | 3.45        | 3.45     |
| number(5,5)  | 0.2         | 0.2      | 0.000012    | 0.00001  |
| number(3,-2) | 182         | 200      | 142.85      | 100      |
| number(2,3)  | 0.123       | 报错     | 0.023       | 0.023    |
|              | 0.23        | 报错     |             |          |
| number(3,3)  | 0.234       | 0.234    | 0.23        | 0.23     |
|              | 0.1         | 0.1      |             |          |
| number(6,3)  | 999.9995    | 999.999  | 0.0095      | 0.01     |

b4.其他数据类型

DECIMAL(P,S) | 数字类型 | P为有效位,S为小数 (和number差不多)

C.日期类型

c1.定义:

date 用于存储日期和时间类型,date 类型的默认格式为:DD-MM-YYYY,当我插入熟悉的 YYYY-MM-DD 格式时,需要进行格式转换。示例:<br/>create table t_date(birth date); |

| TIMESTAMP | 时间戳类型,与 DATE 相比较,TIMESTAMP 类型具有小数位毫秒数,比 DATE 的精度更高

c2.例子使用与错误

| insert into t_date values('22-12月-2018');                   | 2018/12/22                                          |
| insert into t_date values(to_date('2018-12-22', 'yyyy-mm-dd')); | 2018/12/22                                          |
| insert into t_date values(to_date('2018-12-22 15:22:16', 'yyyy-mm-dd hh24:mi:ss')); | 2018/12/22 15:22:16                                 |
| insert into t_date values('2018-12-22');                     | ORA-01861: 文字与格式字符串不匹配                   |
| insert into t_date values('22-12-18');                       | ORA-01843: 无效的月份                               |
| insert into t_date values('22-12-2018');                     | ORA-01843: 无效的月份                               |
| insert into t_date values('12月-22-2018');                   | ORA-01861: 文字与格式字符串不匹配                   |
| insert into t_date values('22-12月-2018 10:17:25');          | ORA-01830: 日期格式图片在转换整个输入字符串之前结束 |
| insert into t_date values(to_date('2018-12-22 15:22:16', 'yyyy-mm-dd hh:mi:ss')); | ORA-01849: 小时值必须介于 1 和 12 之间              |
| insert into t_timestamp values('22-12月-2018');              | 22-12月-18 12.00.00.000000 上午                              |
| insert into t_timestamp values(to_date('2018-12-22', 'yyyy-mm-dd')); | 22-12月-18 12.00.00.000000 上午                              |
| insert into t_timestamp values(to_date('2018-12-22 15:22:26', 'yyyy-mm-dd hh24:mi:ss')); | 22-12月-18 03.22.26.000000 下午                              |
| insert into t_timestamp values(**to_timestamp**('2018-12-22 15:22:26.256', 'yyyy-mm-dd hh24:mi:ss.**ff**')); | 22-12月-18 03.22.26.256000 下午#注意:未指定毫秒数长度时,根据具体值的毫秒数进行转换(比如6位就转为6位)。 |
| insert into t_timestamp values(**to_timestamp**('2018-12-22 15:22:26.2567', 'yyyy-mm-dd hh24:mi:ss.**ff4**')); | 22-12月-18 03.22.26.256700 下午#指定毫秒数                   |

D.大数据类型与二进制类型

d1.理解:

varchar2 最大可以存储2000个中文或4000个英文;而 nvarchar2 只能存2000个中文或英文,当着两个数据类型不够存储时,我们可以考虑使用大数据 long、clob 等类型来存储

d2.long

d2.1用法:

用于存储可变长度的超长字符串,最大长度为2G,通常用于存储备注字段,或者 varchar2 和 nvarchar2 不够存储时。

d2.例子

create table t_long(name long);
insert into t_long values('李a1');

d3.clob

d3.1用法:

CLOB 是一种字符型大型对象(Character Large Object),最大长度为4G,存储与字符集相关

create table t_nclob(name nclob);
insert into t_nclob values('李a3');

二.数据管理

A.6大约束

(1)主键约束  primary key
(2)非空约束   not null
(3)检查约束   check
(4)默认约束 default
(5)唯一约束  unique
(6)外键约束 references

B.创建表格

b1.语法

create table tb_表名称
(
       字段1 数据类型(长度) 约束,
       字段1 数据类型(长度) 约束,
       字段1 数据类型(长度) 约束
)

实例

create table tb_stu_0219
(
       sid number primary key,
       sname varchar2(10) not null,
       ssex char(2) check( ssex in ('男','女')),
       sage number,
       saddress varchar2(100)
)

b2.新增

语法:

insert into tb_表(字段1,...) values(值1,...);
insert into tb_stu_0219 values(1,'斗霸','男',19,'浪琴湾小区');

注意:

多行插入
注意事项:在使用select关键词时,后面必须有from关键词
除了from关键词  必须还需要接表

例子:

insert into tb_stu_0219
select 2,'小三','女',16,'长沙' from dual
union all
select 3,'小三三','女',16,'长沙'from dual
commit;
dual 伪表

b3.删除(delete|truncate【截断】)

delete from tb_stu_0219 where sname = '小三'
rollback;
delete tb_stu_0219;
truncate table tb_stu_0219;

注意:使用truncate截断所有数据后不能事务回滚【rollback】

b4.修改

update tb_stu_0219 set sage = sage - 2
update tb_stu_0219 set sname = '小五' where sname = '小三';
update tb_stu_0219 set sname = '张三',ssex = '男',sage = 99 where sname = '小五';

b5.查询

select * from tb_stu_0219;
select sname,sage from tb_stu_0219;

b6.起别名

select sname as 姓名 from tb_stu_0219;
select sname "姓名" from tb_stu_0219;

注意:as时不需要"",无as时要""

b7.复制表格

复制表的语法
create table 新表名称
as
select * from 旧表

三.伪列

oracle中提供了2个伪列:rowid  rownum
rowid和rownum是不需要手动创建,不管是系统表还是自定义表,在创建的时候,rowid和rownum自动生成,默认是不可见,需要手动显示出来。

select * from emp;
select * from tb_stu_0219;

rowid:唯一标识列,类似身份证号码,无规律,都是通过字母随机组合的。
select rowid,emp.* from emp;

rownum:唯一标识,生成一连串有顺序的标号,从1开始。其本质就是行号。
取前几条数据。Oracle没有top关键词

四.分页

ownum的核心实现分页。
--需求:不考虑排序,直接显示emp表中的第一条----》第五条的数据
--注意事项:如果select中标明了rownum伪列字段,查询条件中的大于符号无效
select a.*,rownum from emp a where rownum >=6 and rownum <= 10
--解决方案:将位列rownum  变成  明列即可。  就是起别名,让rownum这个位列字段成为表的字段。
select b.* from(
select rownum as rid,a.* from emp a 
) b where b.rid between 11 and 15
int pageIndex = 1;//页码   等于1  第一页   等于2  第二页
int pageSize = 5;//每一页显示的数据的条数
start 开始区间
end   结束区间
pageIndex = 1第一页  start = 1   end = 5
pageIndex = 2第二页   start = 6  end = 10
pageIndex = 3第三页   start = 11  end = 15
不管pageIndex = ??
start = end - pageSize +1
start = (pageIndex - 1)* pageSize +1
end = pageIndex * pageSize
相关文章
|
2天前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
2天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
31 0
|
2天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在 DataWorks 中,使用Oracle作为数据源进行数据映射和查询,如何更改数据源为MaxCompute或其他类型
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
30 1
|
2天前
|
SQL Oracle 关系型数据库
Oracle spool格式化数据命令
在这个示例中,通过设置不同的 `SET`命令参数,你可以控制输出的格式,包括每页行数、每行字符数、列分隔符等。你也可以使用其他的 `SET`命令参数来进一步定制输出格式。
16 0
|
2天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
2天前
|
SQL Oracle 关系型数据库
Oracle 12c的TOP N语句:数据排名的“快速通道”
【4月更文挑战第19天】Oracle 12c的TOP N语句是用于快速获取数据集排名前N的记录的SQL查询方法,特别适合寻找最具代表性的数据。通过指定排序条件和数量,TOP N能高效筛选出所需信息,例如最高销售额产品或最大访问量网页。在Oracle 12c中,查询优化器对TOP N查询进行了优化,保证快速返回结果,并提供丰富的排序和过滤选项。基本用法如`SELECT ... ORDER BY ... FETCH FIRST N ROWS ONLY`,还可结合`OFFSET`进行分页查询或用`WITH TIES`保持结果完整性。掌握TOP N语句能提升数据分析效率,助力企业决策。
|
2天前
|
存储 Oracle 关系型数据库
Oracle 12c的临时UNDO:数据的“临时保镖”
【4月更文挑战第19天】Oracle 12c引入的临时UNDO为数据安全提供新保障。它为临时操作和特定事务提供独立UNDO空间,避免共享UNDO带来的性能瓶颈和管理复杂性。临时UNDO随事务开始分配,记录修改历史,事务结束后自动释放。优点包括提高性能、简化管理及保证数据一致性。但需注意手动配置、监控和优化,以防长时间占用资源。了解其工作原理和最佳实践是提升数据库性能的关键。
|
2天前
|
监控 Oracle 关系型数据库
Oracle 12c的Adaptive执行计划:数据的“聪明导航员”
【4月更文挑战第19天】Oracle 12c的Adaptive执行计划是数据库查询的智能优化工具,能根据实际运行情况动态调整执行策略。它像一个聪明的导航系统,不仅生成初始执行计划,还能实时监控并适应统计信息和资源变化,例如自动切换索引或调整并行度。此外,它支持自适应连接和统计信息收集,提升处理复杂查询和变化数据环境的能力。数据管理员应充分利用这一特性来优化查询性能和用户体验。
|
2天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
2天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。