ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Oracle简单理解

2020-03-24 16:00:12  阅读:290  来源: 互联网

标签:date items dd oracle 理解 emp 简单 Oracle select


oracle重要概念
-- 全局数据库 一般只有一个全局数据库
-- 表空间 tablespace 数据库对象,oracle存放数据的基本逻辑单元
-- 模式 schema 理解成“用户”
-- 数据库的实例

oracle数据库的数据类型
1. 数值类型

int float
number(n,m) oracle n: 长度 m:精度 number(5,2) 123.45 number(6)

2. 字符型
char 固定长度
varchar 可变长度 varchar(10) 10个字母,5个汉字
nvarchar 双字节存储 nvarchar(10) 10个字母,10个汉字

varchar2(4000) 建议使用 双字节存储 兼容性较好

varchar2 把空字符串,设定为null
varchar(10)--> 'abc ' 5个长度
varchar2(10) --> 'abc ' 3个长度 空格视为null

3. 日期类型
date yyyy-mm-dd
datetime yyyy-mm-dd hh:mi:ss
timestamp yyyy-mm-dd hh:mi:ss.ssssss

4. 大对象 Lob 最大可以存储4G
BLob Binary 存储二进制数据
CLob Char 存储大本文 text

sql语句的操作类型
DDL 数据库的定义语句 create drop alter
DML 数据库的操作语句 select insert update delete
TCL 事务控制语句 commit rollback

数据库对象 凡是create 创建的就是数据库的对象 create drop alter
-- table
-- view
-- tablespace
-- user
-- sequence
-- oracle高级对象
存储过程 procedure
触发器
函数
程序包

 

oracle高级对象
1. 过程 procedure
作用:
-- 实现模块化编程,封装业务逻辑
-- 一经编译,永久保存数据库中
-- 效率更高,只需要调用过程名

语法:
create procedure 过程名
[(参数列表:1. in 2. out 3. in out)]
as|is
(定义变量,游标...)
begin
exception

end;

2. 函数
语法:
create function 函数名
[(参数列表: 输入参数 in)]
return 数据类型
as|is
begin
end;

3.  程序包, 相当于java中的接口或类 1. 内置程序包 2. 自定义程序包
-- 定义包头 "接口" 只有对象的定义
create or replace package 包名
as
........
end;

-- 定义包主体 "实现类" 包主体的名称必须和包头一致
create or replace package body 包名
as
........
end;

 

以下是Oracle基本语法:

 

--1. 创建 表空间 (sys 或者systm 登陆)
create tablespace orcl_test --指定逻辑名
datafile 'D:\Oracle\oracle_tablespace\orcl_test.DBF' --指定物理文件路径
size 10M autoextend on; -- 指定初始容量10M , 自动扩展容量

 

--2. 创建普通用户 (sys 或者systm 登陆)
create user mike identified by mike
default tablespace orcl_test; -- 指定当前用户的表空间

 

--3.授权 把角色或权限赋给用户 角色相当于权限的集合
select * from role_sys_privs WHERE role='RESOURCE';
select * from role_sys_privs WHERE role='CONNECT';

 

--授权语法
grant RESOURCE,CONNECT to mike;
--撤销语法
revoke CONNECT from mike;

 

--建表
--Oracle没有自增列, 要使用序列自动生成唯一的主键
CREATE TABLE items (
item_id number(9) primary key NOT NULL,
item_name varchar2(200) NOT NULL,
price number(8,2) not NULL,
createtime date not NULL,
detail varchar2(500) not NULL
)

 

select * from items;
-- 添加数据 oracle数据提交(增删改)的方式是手动提交, mysql是自动提交
insert into items values(1,'计算器01',5000.00,sysdate,'very good');
insert into items values(2,'计算器02',5000.00,sysdate,'very good');
insert into items values(3,'计算器03',5000.00,sysdate,'very good');
commit;

 

--主键自增,使用序列
-- 通过sequence生成表的主键
-- 序列是一个oracle 的数据库的对象,作用:让系统维护唯一数值
-- 序列新创建时,没有currval , nextval 伪列
create sequence seq_items_id; -- 默认是从1开始,以1递增
drop sequence seq_items_id;

 

create sequence seq_items_id
start with 2
increment by 1;

 

--查询或产生序列的值
select seq_items_id.nextval from dual;-- dual 是一张“伪表”, 平衡sql语法的作用
select seq_items_id.currval from dual;

 

--序列在sql中的语法
insert into items values(seq_items_id.nextval,'计算器04',5000.00,sysdate,'very good');
insert into items values(seq_items_id.nextval,'计算器05',5000.00,sysdate,'very good');
commit;

 

--oracle常用的函数 3 个转换函数
--to_date() to_char() to_number()
--to_date() 把字符数据转换日期类型数据
insert into items values(seq_items_id.nextval,'计算器99',5000.00,to_date('2018-09-09','yyyy-mm-dd'),'very good');
commit;

 

select to_date('2018-09-09','yyyy-mm-dd') from dual;

 

select * from items where createtime > to_date('2018-09-09','yyyy-mm-dd');

 

--oracle 默认日期格式 'dd/mon/yy' 11/10月/19
select * from items where createtime > '03/5月/18';
insert into items values(seq_items_id.nextval,'计算器999',5000.00,'11/10月/19','very good');
commit;

 

--修改oracle默认日期格式
alter session set nls_date_format = 'yyyy-mm-dd';
insert into items values(seq_items_id.nextval,'计算器9999',5000.00,'2019-09-09','very good');
commit;
--修改oracle默认的语言
alter session set nls_date_language='American';
alter session set nls_date_language='Simplified Chinese';--默认

 

alter session set nls_date_format = 'dd/mon/yy';

 

-- to_char() 把任意类型转换成字符型,格式化输出功能
select to_char(sysdate,'yyyy-mm-dd') from dual;
select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;
select to_char(sysdate,'yyyy') from dual;
select to_char(123678987.89,'$999,999,999.99') from dual;

 

--to_number() 把字符串转成数值
select to_number('123') from dual;

 

--oracle的区间查询 分页sql 嵌套查询 rownum(伪列)
-- rownum 必须从1开始,所以不能使用'>'来筛选,只能使用'<'
select rownum,emp.* from emp where rownum<10;

 

select a.* from
(select rownum rn,emp.* from emp where rownum<=(pageNo*pageSize)) a
where rn>(pageNo-1)*pageSize

 

--分页参数:pageNo=3 pageSize=5
select a.* from
(select rownum rn,emp.* from emp where rownum<=10) a
where rn>5

 

select a.* from
(select rownum rn,emp.* from emp where rownum<=15) a
where rn>10

 

select a.* from
(select rownum rn, e.* from
(select emp.* from emp order by hiredate desc) e where rownum <=10) a
where rn>5

 

select a.* from
(select rownum rn, e.* from
(select emp.* from emp order by hiredate desc) e where rownum <=(pageNo*pageSize)) a
where rn>(pageNo-1)*pageSize

 

标签:date,items,dd,oracle,理解,emp,简单,Oracle,select
来源: https://www.cnblogs.com/allenfortam/p/12559512.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有