oracle基础部分:基本使用;用户管理;表管理
oracle高级部分:oracle表的查询;oracle的权限、角色;oracle的函数;pl/sql编程;oracle数据库管理;索引、约束和事务
oracle基本使用
alter user scott account unlock;
切换用户:
conn sys/root as sysdba;
查看当前用户:
show user;
断开当前用户但不退出sql*plus窗口:
disc[onnect]
断开连接并退出窗口:
exit;
修改自己的密码:
passw
设置行大小,默认80个字符:
show linesize;
set linesize 120;
交互字符&
select * from 表名 where 列名='&abc';
创建或编辑文本
edit c:/aa.sql;//创建
edit c:/aa.sql;//打开
把屏幕显示的记录保存到文件中
spool d:/bak.sql
select * from emp;
spool off;
sql语句必须带";"
pagesize默认显示14行,显示完会换行,打出新表头
set pagesize 100;
oracle用户管理
创建用户(简单版),需具有dba权限
create user 用户名 identified by 密码;
create user chenxb identified by cxb123;//oracle中设置的密码不可以以数字开头
必须授予权限才可以登录
权限 系统权限、对象权限
系统权限120多种:和数据库管理相关的权限
create session登陆到数据库
create table
create index
create view
create sequence 序列
create trigger 触发器
...
对象权限50多种:是和用户操作数据对象相关的权限
update
insert
delete
select
...
角色 自定义角色 预定义角色
预定义角色:把常用的权限集中起来,形成角色
dba
connect
resource
...
自定义角色:自己定义角色
修改密码
alter user 用户名 identified by 新密码;
创建用户细节
sql>create user chenxb identified by cxb123
default tablespace users //默认表空间 表存在的空间
temporary tablespace temp //临时表空间
quota 3m on users; //限制配额
grant create session to chenxb;
grant connect to chenxb;
grant dba to chenxb;
回收权限
revoke
删除用户,默认为cascade 级联,会删除其所有数据,表、视图等
当删除一个用户的时候,如果用户自己已经创建过数据对象,那么删除时需要加选项cascade,表示把这个用户删删除的同时,把该用户创建的数据对象一并删除。如果不想删除其中数据,可以锁定用户。
drop user 用户名 [cascade];
练习:
创建一个用户xiaohong,可以让xiaohong可以登录、创建表、可以操作(crud)自己的表、回收角色、删除该用户
create user xiaohong identified by m123;
grant connect to xiaohong;
grant resource to xiaohong;
connect xiaohong/m123
password xiaohong
旧口令:
新口令:
重新键入新口令:
disconnect;
conn xiaohong/xiaohong
create table user(id number);
insert into user values(1);
select * from user;
conn sys/root as sysdba
revoke connect from xiaohong;
revoke resource from xiaohong;
drop user xiaohong cascade;
oracle方案scheme
当创建一个用户后,如果用户创建了任意一个数据对象,这时dbms就会自动创建一个与用户相对应的方案,该方案名称与用户名一致。因此,oracle可以创建相同表名的表(方案不同)。
授予xiaohong对scott用户emp表的查询或所有权限:
conn scott/tiger
grant select[all] on emp to xiaohong;
conn xiaohong/xiaohong
select * from emp;//默认查询自己的emp表
select * from scott.emp;
update scott.emp set job='Teacher' where job='&job';
将tea把自己拥有的对scott.emp的权限转给stu:
conn scott/tiger
grant all on emp to tea with grant option;
//with grant option表示得到权限的用户可以把权限继续分配
//with admin option如果是系统权限,则带with admin option
conn tea/tea
grant select on scott.emp to stu;
revoke select on scott.emp from stu;
使用profile文件对口令进行管理
需求:只允许某个用户最多尝试登录三次,如果三次没有成功,则锁定两天,两天后才能重新登录
1、建立profile
create profile myprofile1 limit failed_login_attemps 3 password_lock_time 2;
2、分配给某个用户
alter user scott profile myprofile1;
解锁用户
alter user scott account unlock;
终止口令
创建一个账户,其密码10天后过期,宽限期为2天,到时候必须重新设置密码
1、建立profile
create profile myprofile2 limit password_life_time 10 password_grace_time 2;
2、分配给某个用户
alter user scott profile myprofile2;
删除profile
drop profile myprofile1;
to_char函数
select * from emp where to_char(hiredate,'yyyy-mm-dd')>'1993-1-1';
% _
姓名为S开头的人:
select * from emp where ename like 'S%';
查询eno为100,200,800的雇员情况
select * from emp where eno in(100,210,800);
select * from emp order by sal;//默认为升序asc排列 desc降序
to_date使用
to_date(string,'format')
insert into emp(empno,hiredate) values(1111,to_date('1998-11-11','yyyy-mm-dd'));
使用子查询完成行迁移的需求
使用sql建表
create table temp# as select empno,ename from emp where ename like 'S%';
select * from temp#;
使用子查询完成更新
?希望员工scott的岗位、工资、补助与smith员工一样
update emp set(job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT';
oracle函数
从大方面来说,分为单行函数,比如:length ... 和多行函数,比如:max() min() avg() ...
单行函数:select length(ename) from emp; 请查询出名字字符为4的雇员 select * from emp where length(ename)=4;
多行函数:select max(sal) from emp;
单行函数分类:
1、字符函数
用于处理字符相关的函数
replace(char1,search_string,replace_string)
?显示所有员工的姓名,用“我是A”替换“A”
select replace(ename,'A','我是A') from emp;
instr(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现的指定的字符的位置;C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 出现的位置
,默认为1
?请找出“oracle traning”第二个ra出现的位置
select instr('oracle traning','ra',1,2) from dual;
1.ASCII
返回与指定的字符对应的十进制数
select ascii('A') A,ascii('a') a,ascii(0) zero,ascii(' ') space from dual; //虚表
2.CONCAT
连接两个字符串
select concat('010-','888888')||'转23' 高前景电话 from dual;
select concat(ename,' 是好人 ') from emp; <==>select ename||'是好人' from emp;
3.INITCAP
返回字符串,并将字符串的第一个字母大写;
select initcap('smith') upp from dual;
4.UPPER/LOWER
返回字符串,并将所有字符大写/小写
select upper('aBcDEfgh') upper from dual;
select lower(ename),upper(ename) from emp;
5.SUBSTR(string,start,count)
取字符串,从start开始,取count个
select substr('13637063260',3,6) from dual; 637063
把雇员的名字首字母小写,其他字母大写
select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from emp;
6.字符填充(粘贴)lpad左填充 rpad右填充 rpad(值,总共位数,什么字符填充)
select rpad(ename,20,' '),sal from emp;
7.LTRIM和RTRIM
LTRIM 删除左边出现的字符串
RTRIM 删除右边出现的字符串
删除后面的字符a
select rtrim(' ni shi shui?aaaa','a') from dual;
8.TRIM
去掉指定字符串或是数值前后的某些字符或数值
select trim( 0 from 00099988000) from dual;
9.ABS
返回指定值的绝对值
select abs(100),abs(-100) from dual;
10.CEIL
返回大于或等于给出数字的最小整数 向上取整
select ceil(3.1415926) from dual;
11.FLOOR
向下取整
select floor(3.1415926) from dual;
12.MOD 取模
select mod(5,2) from dual;
13.ROUND
四舍五入
select round(45.2) from dual;
14.TRUNC
截取,若无指定截取到第几位则默认忽略小数点后的值,只取整数
select trunc(45.8) from dual;
若指定
select trunc(123.23456,2) from dual; //123.23
select trunc(123.23455,-2) from dual;//100
15.SYSDATE
系统当前日期
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;
16.ADD_MONTHS 非常重要
增加或减去年份
请查询最近3个月入职的员工 //把员工的入职时间加上三个月,与当前时间比较,如果大于当前时间,则该员工为最近三个月内入职
select * from emp where add_months(hiredate,3) >= sysdate;
17.LAST_DAY
返回日期的最后一天
18.MONTHS_BETWEEN(date2,date1)
给出date2到date1的月份
select months_between(to_date('1113-11-1','yyyy-mm-dd'),to_date('1112-11-1','yyyy-mm-dd')) from dual;
19.TO_CHAR
select to_char(sal,'L999G999D99') from emp;
select * from emp where to_char(hiredate,'yyyy')='1988';
20.TO_NUMBER
将给出的字符转换为数字
21.DECODE
select ename 姓名,decode(deptno,10,'10号',20,'20号',30,'30号') 部门 from emp;
22.AVG MAX MIN DISTINCT
ORACLE提供了一套系统函数,可以查询系统信息
SYS_CONTEXT
select sys_context('userenv','terminal') from dual; //当前会话的用户所对应的终端的标识符
select sys_context('userenv','db_name') from dual; //查看当前数据库名称(实例名称)
select sys_context('userenv','language') from dual; //查看会话用户所使用的语言
select sys_context('userenv','nls_date_format') from dual; //查看当前会话用户的日期显示格式
select sys_context('userenv','session_user') from dual; //查看当前会话所对应的数据库用户名
select sys_context('userenv','current_schema') from dual; //查看当前会话客户对应的默认方案名
select sys_context('userenv','host') from dual; //返回数据库所在主机的名称