oracle基本操作

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; //返回数据库所在主机的名称

你可能感兴趣的:(oracle基本操作)