Oracle 数据库操作

1.创建数据库文件:

create tablespace [database_name] logging datafile 'F:\oracle\database_name.dbf' size 500m autoextend on next 500m maxsize 10240m extent management local;

2.创建数据库临时文件:

create temporary tablespace database_name_temp tempfile 'F:\oracle\database_name_temp.dbf' size 500m autoextend on next 500m maxsize 10240m extent management local;

3.创建用户与上述两个文件形成映射关系:

create user username identified by password default tablespace database_name temporary tablespace database_name_temp;

通过授权方式来创建用户:

grant connect,resource to test identified by test;

4.添加用户权限:

grant connect,resource,dba to username;//角色权限
grant create session to username;//登录权限

5.删除数据库:

conn username/password sysdba;
drop tablespace database_name including contents and datafiles;
drop tablespace database_name_temp including contents and datafiles;

6.删除用户:

drop user username cascade;

7.导入数据库:

imp username/password@localhost:1521/orcl file='database_file.dmp' full=y;
imp username/password@localhost:1521/orcl file=f:\databasename.dmp full=y ignore=y statistics=none buffer=819200;//ignore:忽视错误;statistics=none:exp和imp的版本存在差异;full=y:全部导入;buffer:设置缓冲区,默认为4k

impdp test/test@localhost:1521/orcl directory=dir_dmp dumpfile=skct_20200805.dmp remap_schema=skct:test

如果要导入的数据库没有表空间,则在impdp语句后加上参数:TRANSFORM=segment_attributes:n
关键字 说明 默认
USERID 用户名/口令
FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小
FROMUSER 所有人用户名列表
FILE 输入文件 (EXPDAT.DMP)
TOUSER 用户名列表
SHOW 只列出文件内容 (N)
TABLES 表名列表
IGNORE 忽略创建错误 (N)
RECORDLENGTH IO记录的长度
GRANTS 导入权限 (Y)
INCTYPE 增量导入类型
INDEXES 导入索引 (Y)
COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y)
PARFILE 参数文件名
LOG 屏幕输出的日志文件
CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)
STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)
TRANSPORT_TABLESPACE 导入可传输的表空间元数据
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户

8.导出数据库:

导出数据库:

exp username/password@orcl file=d:/a.dmp full=y;//本地库
exp username/password@orcl file=d:/a.dmp owner=username;//本地库(根据用户名导出数据库)
exp username/password@IP:1521/orcl file=d:/a.dmp full=y;//远程库
exp username/password@orcl file=d:\t_20200611.dmp owner='username' statistics=none indexes=n buffer=5120000

--如果导出出现问题,可以使用以下方法:
--1.创建 DIRECTORY
create directory dir_dp as 'd:/dmp';
--2.导出
expdp username/password@localhost:1521/orcl directory=dir_dp dumpfile=a.dmp schemas=username;
关键字 说明 默认
USERID 用户名/口令
FULL 导出整个文件 (N)
BUFFER 数据缓冲区的大小
OWNER 导出指定的所有者用户名列表
FILE 输出文件 (EXPDAT.DMP)
TABLES 导出指定的表名列表
COMPRESS 是否压缩导出的文件 (Y)
RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y)
INCTYPE 增量导出类型
INDEXES 导出索引 (Y)
RECORD 跟踪增量导出 (Y)
ROWS 导出数据行 (Y)
PARFILE 参数文件名
CONSTRAINTS 导出限制 (Y)
CONSISTENT 交叉表一致性
LOG 屏幕输出的日志文件
STATISTICS 分析对象(ESTIMATE)
DIRECT 直接路径 (N)
TRIGGERS 导出触发器 (Y)
FEEDBACK 显示每 x 行 (0) 的进度
FILESIZE 各转储文件的最大尺寸
QUERY 选定导出表子集的子句
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TABLESPACES 导出指定的表空间列表

运行 sql 文件:

@f:\oracle-all.sql
start f:\oracle-all.sql

9.查看数据库表 user 中有哪些字段:

select * from user_col_comments where table_name='user';

10.查看当前用户的所有视图:

select * from user_views;

创建带有错误的视图:

create force view viewName as select * from userTable;//此 userTable 可以不存在

11.查看视图 test 定义语句:

select dbms_metadata.get_ddl('VIEW','test') from dual;
select text from all_views where view_name='test';

12.添加列

alter table tablename add (field VARCHAR2(50) NULL,field VARCHAR(2) NULL,...);

13.删除列

ALTER TABLE tablename DROP(field1,field2);

14.设置列可以为空

alter table tablename modify field null;

15.查看约束

select * from user_constraints;

-- 删除唯一约束条件
 alter table [tablename] DROP CONSTRAINT [CONSTRAINT_NAME]

16.创建序列

create sequence hq01_seq start with 1 increment by 1;

17.查看序列

select * from user_sequences;

18.创建触发器

create or replace trigger [triggername]
   before insert on [tablename]
      for each row
         when(new.[primaryKey] is null)
   begin
      select [createNewSequence].nextval into:NEW.[primaryKey] from dual;
end;

-- 删除触发器
DROP TRIGGER trigger_name;

19.比较两个时间段是否有重叠

SELECT COUNT(*) FROM HQ02 WHERE AHQ022=#ahq022#
		AND  (AHQ025,AHQ026)
		OVERLAPS
		(TO_DATE(#传入的开始时间参数#,'yyyy-MM-dd hh24:mi:ss'),TO_DATE(#传入的结束时间参数#,'yyyy-MM-dd hh24:mi:ss'))//需要注意的是时间的格式转换
 SELECT * FROM dual
     WHERE 
        (to_date('20170101','YYYYMMDD'),to_date('20190101','YYYYMMDD'))
     OVERLAPS
        (to_date('20160101','YYYYMMDD'),to_date('20170101','YYYYMMDD'));
//包体中数据的判断
SELECT COUNT(*) FROM HQ02 WHERE AHQ022=PRM_AHQ022 AND (AHQ025,AHQ026) OVERLAPS 	(PRM_AHQ025,PRM_AHQ026)

20.CREATE TYPE 定义新的用户定义数据类型。

CREATE OR REPLACE TYPE TABLE_AAC002_ISJY IS TABLE OF TYPE_AAC002_ISJY;

21.常见单行函数

分类:字符串相关,数字相关,日期相关,类型转换相关,NVL 函数。

字符串相关函数:

length(str) 			  --获得字符串 str 的字符长度(按字符计,汉字、英文、数字都是1个字符)
lengthb(str)              --获得字符串 str 的字符长度(按字节计,汉字是3个字节,英文1个字节)
concat(str1,str2)		  --相当于 str1||str2 的功能,字符串拼接
CONVERT( string1, char_set_to [, char_set_from] )  --返回特定字符集中的字符串值
INITCAP( string1 ) --string1 :字符串参数,其中每个单词中的第一个字符将转换为大写字母,其余所有字符转换为小写字母。
substr(str,begin,length)  --截取字符串,从下标 begin 开始,截取 length 位
substr(str,begin,length) --按字节截取,不足1个汉字长度的,返回两个空格;多余1个汉字少于2个汉字,返回截取值+空格
instr(str1,str2,begin)    --在 str1 里查找 str2 ,从下标 begin 开始查找,找到返回 str2 首字母所在的下标,否则返回 -1
lower(str)/upper(str) 	   --将 str 转换成小写/大写
trim  					  --去除左右两边指定字符串
ltrim 					  --去除左边指定字符串
rtrim 					  --去除右边指定字符串
replace(str,old,new)  	    --替换字符串中指定字符为新的字符串
函数 说明 案例 结果
ASCII(X) 求字符X的ASCII码 select ASCII(‘A’) FROM DUAL; 65
CHR(X) 求ASCII码对应的字符 select CHR(65) FROM DUAL; ‘A’
LENGTH(X) 求字符串X的长度 select LENGTH(‘ORACLE技术圈’)from DUAL; 9
CONCATA(X,Y) 返回连接两个字符串X和Y的结果 select CONCAT(‘ORACLE’,‘技术圈’) from DUAL; ORACLE技术圈
INSTR(X,Y[,START]) 查找字符串X中字符串Y的位置,可以指定从Start位置开始搜索,不填默认从头开始 SELECT INSTR(‘ORACLE技术圈’,‘技术’) FROM DUAL; 7
LOWER(X) 把字符串X中大写字母转换为小写 SELECT LOWER(‘ORACLE技术圈’) FROM DUAL; oracle技术圈
UPPER(X) 把字符串X中小写字母转换为大写 SELECT UPPER(‘Oracle技术圈’) FROM DUAL; ORACLE技术圈
INITCAP(X) 把字符串X中所有单词首字母转换为大写,其余小写。 SELECT INITCAP('ORACLE is good ') FROM DUAL; Oracle Is Good
LTRIM(X[,Y]) 去掉字符串X左边的Y字符串,Y不填时,默认的是字符串X左边去空格 SELECT LTRIM(‘–ORACLE技术圈’,‘-’) FROM DUAL; ORACLE技术圈
RTRIM(X[,Y]) 去掉字符串X右边的Y字符串,Y不填时,默认的是字符串X右边去空格 SELECT RTRIM(‘ORACLE技术圈–’,‘-’) FROM DUAL; ORACLE技术圈
TRIM(X[,Y]) 去掉字符串X两边的Y字符串,Y不填时,默认的是字符串X左右去空格 SELECT TRIM(‘–ORACLE技术圈–’,‘-’) FROM DUAL; ORACLE技术圈
REPLACE(X,old,new) 查找字符串X中old字符,并利用new字符替换 SELECT REPLACE(‘ORACLE技术圈’,‘技术圈’,‘技术交流’) FROM DUAL; ORACLE技术交流
SUBSTR(X,start[,length]) 截取字符串X,从start位置(其中start是从1开始)开始截取长度为length的字符串,length不填默认为截取到字符串X末尾 SELECT SUBSTR(‘ORACLE技术圈’,1,6) FROM DUAL; ORACLE
RPAD(X,length[,Y]) 对字符串X进行右补字符Y使字符串长度达到length长度 SELECT RPAD(‘ORACLE’,9,‘-’) from DUAL; ORACLE—
LPAD(X,length[,Y]) 对字符串X进行左补字符Y使字符串长度达到length长度 SELECT LPAD(‘ORACLE’,9,‘-’) from DUAL; —ORACLE

CONVERT 函数返回特定字符集中的字符串值。 可用的字符集是:

字符集 描述
US7ASCII 美国 7 位 ASCII 字符集
WE8DEC 西欧 8 位字符集
WE8HP 惠普西欧 Laserjet 8 位字符集
F7DEC DEC 法语 7 位字符集
WE8EBCDIC500 IBM 西欧 EBCDIC 代码第 500 页
WE8PC850 IBM PC 代码第 850 页
WE8ISO8859P1 ISO 8859-1 西欧 8 位字符集

22.日期相关函数

sysdate 						 --表示当前系统时间
add_months(myDate,num) 			 --对 myDate 做月份的算数运算
last_day(myDate) 				 --月份最后一天函数:获取 myDate 所在月份的最后1天
NEXT_DAY(r,c)                    --指定日期后一周的日期函数::返回指定R日期的后一周的与r日期字符(c:表示星期几)对应的日期。
months_between(myDate1,myDate2)  --返回两个日期间的月份数:计算两个日期之间相隔几个月,返回值为小数
ADD_MONTHS(r,n)                --给日期加上指定的月份函数:该函数返回在指定日期r上加上一个月份数n后的日期。
trunc(myDate,日期格式字符串) 	    --根据指定日期格式对 myDate 日期做截断【可选日期格式字符串:year-按年截断,month-按月截断,day-星期,省略格式字符串表示截断时分秒】
ROUND(r[,f]--日期截取函数:将日期r按f的格式进行四舍五入。如果f不填,则四舍五入到最近的一天。
EXTRACT(time--返回指定日期中特定部分的函数:返回指定time时间当中的年、月、日、分等日期部分。

日期的四舍五入:

round(date,format) 	--date 为指定日期,format 为指定格式,默认为 format 为 ddd 四舍五入到某天
year 				--四舍五入到某年的1月1日
month 				--四舍五入到某月的1日
ddd 				--四舍五入到某天
day 				--四舍五入到某周的周日

23.数字相关函数

mod(num1,num2) 		  --取模,num1 % num2
trunc(n,length) 	  --对数字 n 进行截断,精度到小数点后 length 位
round(n1,length) 	  --对数字 n 四舍五入精度到小数点后 length 位
abs(num) 			  --对 num 取绝对值
dbms_random.random()  --获取随机数,产生一个很大的随机数(可正,可负)
函数 解释 案例 结果
ABS(X) 求数值X的绝对值 select abs(-9) from dual; 9
COS(X) 求数值X的余弦 select cos(1) from dual; 0.54030230586814
ACOS(X) 求数值X的反余弦 select acos(1) from dual; 0
CEIL(X) 求大于或等于数值X的最小值 select ceil(7.8) from dual; 8
FLOOR(X) 求小于或等于数值X的最大值 select floor(7.8) from dual; 7
log(x,y) 求x为底y的对数 select log(2,8) from dual; 3
mod(x,y) 求x除以y的余数 select mod(13,4) from dual; 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值