oracle相关的知识
spool e:\xxx.txt
Spool off 结束
SQL> clear screen
SQL> select * from v$tablespace;
SQL> set linesize 500;
SQL> select * from v$tablespace;
SQL> create tablespace t11
datafile 'E:\U2\t11.dbf'
size 200m
autoextend on next 20 maxsize unlimited;
SQL> select tablespace_name,autoextensible from dba_data_files;
SQL> alter database datafile 'E:\U2\t11.dbf' autoextend off;
SQL> alter database datafile 'E:\U2\t11.dbf' autoextend on;
SQL> drop tablespace t11;
SQL> --删除表空间的同时,删除数据文件
SQL> drop tablespace t11 including contents and datafiles;
SQL> create user wym identified by wym default tablespace t10 ;
SQL> grant connect,resource to t11;
SQL> conn wym/wym;
SQL> --使用dba 查询所有的用户名以及默认的表空间
SQL> select username,default_tablespace from dba_users;
alter user 用户名 default tablespace 表空间的名称!
SQL> alter user 用户名 identified by 新密码
SQL> drop user t11 cascade;
create table teacher
(
tNo number(4) not null,
tName varchar2(20) not null,
birthday date
);
--查询当前用户下面所有的表
select * from tab;
--查询表中的数据
select * from teacher;
--01.给表中新增两个字段
alter table teacher add(sal number(7,2),wechat varchar2(20));
--02.修改字段的属性
alter table teacher modify(tName varchar2(10));
--03.删除一个字段
alter table teacher drop column wechat;
--04.新增主键
alter table teacher add constraint pk_teacher_tno primary key(tno);
--05.添加唯一约束
alter table teacher add constraint uk_teacher_tname unique(tname);
--06.增加一个性别字段
alter table teacher add(sax char(2));
--07.修改字段的名称
alter table teacher rename column sax to sex;
--08.增加sex字段的检查约束
alter table teacher add constraint ck_teacher_sex check(sex in('男','女'));
--09.删除检查约束
alter table teacher drop constraint ck_teacher_sex;
--10.创建外键约束 在student 从表中创建
create table student
(
sNo number(4) not null primary key,
tNum number(4) not null
)
references teacher(tNo);
DDL 数据定义语言
create alter drop truncate
DML 数据操作语言
insert delete update select
TCL 事务控制语言
commit rollback
DCL 数据控制语言
grant revoke
create sequence sq_teacher_tno --序列的名称
start with 10 --开始的位置
increment by 1 --递增的序列值
maxvalue 9999999999 --设置最大值
--是否循环 cycle | nocycle
--是否保存到内存中 cache| nocache
select * from user_sequences;
--查询序列的当前值
select SQ_TEACHER_TNO.Currval from dual;
--查询序列的下个值
select SQ_TEACHER_TNO.nextval from dual;
insert into teacher(tno,tname)
values(SQ_TEACHER_TNO.Nextval,'小黑2')
select * from dual;
select sysdate from dual;
select to_char(sysdate,'yyyy-MM-dd hh:mi:ss') from dual;
--当作一个伪表!也就是查询的信息不存在任何一个表中的时候!
01.cmd
02.sqlplus 用户名/密码
03.@ sql语句的地址
--01.查询老师的姓名和对应导师的姓名 自连接
select t1.tname as 老师姓名,t2.tname as 导师的姓名
from teacher t1,teacher t2
where t1.mgrno=t2.tno
--02. 查询老师姓名,部门名称和部门编号
select tname,dname,dept.deptno
from teacher,dept
where teacher.deptno=dept.deptno
--03.查询 姓 王 的老师信息 _代表一个字符 %
select * from teacher
where tname like '王%'
where tname like '王_'
select tname,sal from teacher
where tname like '陈%' or tname like '王%'
update teacher set sal=sal+20000
where tname like '王%'
delete from teacher
drop table dept
alter table teacher add constraint fk_teacher_deptno
foreign key(deptno)
references dept(deptno)
select tno,tname from teacher
where gendar='女'
select tno,tname,sal from teacher
where sal between 10000 and 20000
select tname,sal,job from teacher
where job in('讲师','研发')
order by sal desc
select 'insert into dept values('||deptno||','''||dname||''','''||loc||''');'
from dept
--01.查询招生部 所有男老师的姓名
select tname,dname from teacher,dept
where teacher.deptno=dept.deptno
and teacher.gendar='男' and dept.dname='招生部'
select tname,deptno from teacher
where deptno=(select deptno from dept where dname='招生部')
and gendar='男'
--不使用别名 会默认把子查询语句作为列名
select tname,(select dname from dept where deptno=teacher.deptno) as 部门
from teacher
select * from teacher
where deptno in
(select deptno from dept where dname in('招生部','人力部'))
--exists 并不是返回一个结果集 返回true 或者false
select * from teacher
where exists
(select deptno from dept
where
deptno=teacher.deptno and
dname in('招生部','人力部');
select tname||'===='||sal||'==='deptno from teacher
--事务控制语句
create table dept(
deptno number(2) primary key,
dname varchar2(20),
loc varchar2(20)
);
--02.插入数据
insert into dept values(10,'人力部','北京海淀');
insert into dept values(20,'财务部','北京海淀');
insert into dept values(30,'市场部','北京海淀');
insert into dept values(40,'技术部','北京海淀');
--03.再次插入两条数据
insert into dept values(50,'市场部1','北京海淀');
insert into dept values(60,'技术部2','北京海淀');
--设置回滚点
savepoint a;
--再插入新数据
insert into dept values(70,'市场部3','北京海淀');
--事务回滚到指定的回滚点
rollback to savepoint a;
--04.查询dept表 有 50,60的部门
select * from dept;
--05.回滚事务
rollback;
-- 查询dept表 有没有 50,60的部门
select * from dept;
select tname,(select dname from dept where deptno=teacher.deptno) as 部门名称
from teacher
where deptno=(select deptno from dept where dname='招生部')
and gendar='男'
select tname,dname
from teacher t,dept d
where t.deptno=d.deptno
and gendar='男' and dname='招生部'
select tname,dname
from teacher t inner join dept d
on t.deptno=d.deptno
where gendar='男' and dname='招生部'
--02.自连接 查询老师的姓名 和导师的姓名
select t1.tname 老师姓名,t2.tname 导师姓名
from teacher t1,teacher t2
where t1.mgrno=t2.tno
--03.使用左外链接查询老师的姓名,对应导师的姓名 以及部门
select t1.tname 老师姓名,t2.tname 导师姓名,d.dname 部门名称
from teacher t1 left join teacher t2
on t1.mgrno=t2.tno
left join dept d
on t1.deptno=d.deptno
select t1.tname 老师姓名,t2.tname 导师姓名,d.dname 部门名称
from teacher t1,teacher t2,dept d
where t1.mgrno=t2.tno and t1.deptno=d.deptno
--04.左外链接 以左表为准 右表中没有匹配的数据 返回空
select * from
teacher t1 left join dept d
on t1.deptno=d.deptno
select * from
teacher t1 right join dept d
on t1.deptno=d.deptno
select substr('world',1,3) from dual;
--从第1个位置查询之后的所有
select substr('world',1) from dual;
--会把字符串转换成数字 如果不能转换就不能查询
select substr('world','1') from dual;
select instr('world','o') from dual;
select to_char(sysdate,'yyyy-MM-dd hh24:mi:ss') from dual;
select to_date('2017-02-28 11:16:56','yyyy-MM-dd hh24:mi:ss') from dual;
--如果e1位空则返回e2, 如果不会空直接返回当前的值
select nvl(mgrno,500) from teacher
select nvl2(mgrno,10000,500) from teacher
-- 如果value的值等于if1,返回then1
-- 如果value的值等于if2,返回then2
--如果value的值不等于任何if,则返回else
select decode(mgrno,null,0,1008,5000,1) from teacher
--查询总记录数 count(1) 替换count(*)
select count(1) from teacher
--查询薪水总和
select sum(sal) from teacher
--查询最高薪水
select max(sal) from teacher
--查询最低薪水
select min(sal) from teacher
--查询平均薪水
select avg(sal) from teacher
-- 按照部门的总薪水进行 降序排列
select deptno,avg(sal),max(sal),sum(sal)
from teacher
group by deptno
order by sum(sal) desc
-- 再增加一个条件 (部门人数在10人以上)
select deptno,avg(sal),max(sal),sum(sal)
from teacher
group by deptno
having count(deptno)>10
order by sum(sal) desc
select count(1) from teacher where deptno is null
select sal,tname from teacher order by sal
rank() over(order by sal) 薪水排名
from teacher
select sal,tname,
dense_rank() over(order by sal) 薪水排名
from teacher
select sal,tname,
row_number() over(order by sal) 薪水排名
from teacher
-- partition by deptno 按照部门进行分组
select deptno,tname,sal,
rank() over(partition by deptno order by sal desc) 薪水排名
from teacher
--01.union 并集(两个结果集中所有的数据) 重复数据显示一次
select tno from teacher where tno<1020
union
select tno from teacher where tno<1025
select tno from teacher where tno<1020
union all
select tno from teacher where tno<1025
select tno from teacher where tno<1020
intersect
select tno from teacher where tno<1025
select tno from teacher where tno<1025
minus
select tno from teacher where tno<1020
-- rowid:表中行的存储地址! A-Za-z0-9+/ 第二位变成B 依次类推
select rowid from teacher
select rowid,tname from teacher where rowid='AAASRxAAGAAAAJ7AAA'
--rownum只能对=1或者<n进行操作!
--对于>n这种结果怎么查询?
--01.建立临时表
--02.让伪列rownum成为临时表中真正的列
--03.使用伪列的别名进行操作
--上面的sql执行后 有rownum 是乱序的
--那么我们就重新分配rownum
--怎么重新分配? 再次查询 查询的表就是上面的sql
(select * from teacher order by sal desc)
where rownum<6
--执行上面的sql后 发现 rownum 有序了 而且是薪水的降序排列
(select * from teacher order by sal desc)
where rownum<6 -- 得到薪水的前5名
select * from
(select * from teacher order by sal desc)
where rownum=5 -- 不可行
(select t.*,
dense_rank() over(order by sal desc) ranks from teacher t)
where ranks=5
--01.使用分析函数
select * from
(select t.*,
dense_rank() over(order by sal desc) ranks from teacher t)
where ranks>5 and ranks<11
select * from teacher order by sal desc
-- rownum是乱序 但是薪水已经降序排列了
(select * from teacher order by sal desc) t
-- 我们把上面的sql 当成一个临时表
-- rownum 进行了重新排序!
--接下来 就开始查
select * from
(select t.*,rownum rw from
(select * from teacher order by sal desc) t)
where rw>5 and rw<11
-- 如果没有权限
-- 使用dba登录 grant create any view to 用户名;
as
select tname,sal from teacher
select * from teacher_view
--循环等操作! 在数据库 执行pl/sql程序时,pl/sql和sql语句时分别进行解析和执行的!
--01.declare 可选部分 声明 : 变量, 异常,游标...
declare
v_name teacher.tname%type;
v_sal teacher.sal%type;
v_result varchar2(30);
begin
select t.tname,t.sal into v_name,v_sal from teacher t where tno=1002;
--根据薪水 得到不同的返回结果
if v_sal>=2000 and v_sal<=10000 then
v_result:='还可以吧';
elsif v_sal>10000 and v_sal<=40000 then
v_result:='真可以';
elsif v_sal>40000 then
v_result:='牛牛牛';
else
v_result:='咩咩';
end if;
dbms_output.put_line(v_name||':'||v_sal||'====='||v_result);
--根据 v_result的值 输出不同的结果
case v_result
when '还可以吧' then
dbms_output.put_line(v_name||'工资在2k到10k');
when '真可以' then
dbms_output.put_line(v_name||'工资在10k到40k');
when '牛牛牛' then
dbms_output.put_line(v_name||'工资在40k以上');
else
dbms_output.put_line(v_name||'工资2k以下');
end case;
end;
--01.loop 语法
loop
执行的语句;
exit when 条件;
end loop;
i number;
begin
i:=1;
loop
dbms_output.put_line(i);
i:=i+1;
exit when i>50;
end loop;
end;
--02.while 语法
while 条件 loop
执行的语句;
end loop;
i number;
begin
i:=1;
while i<=50 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
执行的语句;
end loop;
i number;
begin
for i in 1..50
loop
dbms_output.put_line(i);
end loop;
end;
--每个游标区都有一个名字,用户通过游标一行一行的获取记录!
--02.显示游标 可以返回多行的查询!
--03.REF游标 用于处理运行时才能确定的动态sql 查询结果
--01.sql%found 影响了一行或者多行 都返回 true
--02.sql%notfound 没有影响行数 返回 true
--03.sql%rowcount sql语句影响的行数
--04.sql%isopen 游标是否打开,始终为false
declare
tname teacher.tname%type; --声明一个变量
cursor teacher_cursor is select tname from teacher; --声明游标
begin
open teacher_cursor; --打开游标
fetch teacher_cursor into tname;
--循环输出tname
while teacher_cursor%found
loop
dbms_output.put_line('教师的姓名===='||tname);
fetch teacher_cursor into tname;
end loop;
close teacher_cursor;--关闭游标
end;
:old 代表之前的值
:new 更改之后现在的值
这两个值 只能在 for each row 中使用
update语句 :old :new
insert语句 :new
delete语句 :old
--创建一个teacher_log (只要有人动teacher表,数据就会记录在teacher_log表中)
create table teacher_log(
logid number not null,
old_value varchar2(200),
create_date date,
log_type number,
tno number
)
--给logid设置主键
alter table teacher_log add constraint pk_teacher_logid primary key(logid);
create sequence sq_teacher_logid
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;
create or replace trigger tr_teacher
after insert or update or delete --会在增删改之后 触发
on teacher for each row
--声明
declare
v_old_value teacher_log.old_value%type;
v_type teacher_log.log_type%type;
v_tno teacher_log.tno%type;
begin
if inserting then
v_type:=1; --新增
v_tno :=:new.tno;
v_old_value:=:new.tno||'====='||:new.tname;
elsif deleting then
v_type:=2; --删除
v_tno :=:old.tno;
v_old_value:=:old.tno||'====='||:old.tname;
else
v_type:=3; --修改
v_tno :=:old.tno;
v_old_value:=:old.tno||'====='||:old.tname||'===='||:new.sal;
end if;
--将记录写入到 teacher_log
insert into teacher_log values
(sq_teacher_logid.nextval,v_old_value,sysdate,v_type,v_tno);
end tr_teacher;
create or replace function fn_teacher_tid
(
f_tid varchar2
)
return varchar2
is
f_result teacher.tid%type;
if length(f_tid)!=18 then
dbms_output.put_line('身份证不正确');
else
dbms_output.put_line('身份证正确');
end if;
--给返回值赋值
f_result:=substr(f_tid,1,6)||'********'||substr(f_tid,15);
return f_result;
--调用函数
select fn_teacher_tid(110101198603304014) from dual;
-- 新增教师 身份证不满足要求 报错
create or replace procedure pro_add_teacher
(
p_tno teacher.tno%type,
p_tname teacher.tname%type,
p_tid teacher.tid%type,
p_sal teacher.sal%type
)
is
e_tid_validate exception;
if length(p_tid)!=18 --判断身份证号不满足18位
then --抛出异常
raise e_tid_validate;
end if;
--新增
insert into teacher(tno,tname,tid,sal)
values(p_tno,p_tname,p_tid,p_sal);
--手动提交事务
commit;
--对异常进行处理
exception
when e_tid_validate then
dbms_output.put_line('请输入正确的身份证号');
when others then
dbms_output.put_line('其他的异常');
end pro_add_teacher;
--调用存储过程
oracle相关的知识的更多相关文章
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- 【RAC】RAC相关基础知识
[RAC]RAC相关基础知识 1.CRS简介 从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...
- apache系统故障排查方案及相关操作知识
apache系统故障排查方案及相关操作知识 1.查看系统开的apache服务在哪个端口监听,有几个apache在服务,它的初始pid是多少 netstat -alop |grep LISTEN |gr ...
- JAVA相关基础知识
JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...
- .NET同步与异步之相关背景知识(六)
在之前的五篇随笔中,已经介绍了.NET 类库中实现并行的常见方式及其基本用法,当然.这些基本用法远远不能覆盖所有,也只能作为一个引子出现在这里.以下是前五篇随笔的目录: .NET 同步与异步之封装成T ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中web相关的知识(概述)
Spring Framework中web相关的知识 1.概述: 参考资料:官网documentation中第22小节内容 关于spring web mvc: spring framework中拥有自 ...
- iOS蓝牙开发(二)蓝牙相关基础知识
原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...
- iOS网络相关零散知识总结
iOS网络相关零散知识总结 1. URL和HTTP知识 (1) URL的全称是Uniform Resource Locator(统一资源定位符). URL的基本格式 = 协议://主机地址/路径 ...
- Linux下使用ps命令来查看Oracle相关的进程
Linux下可以使用ps命令来查看Oracle相关的进程 Oracle Listener 这个命令会列出Oracle Net Listener的进程 [oracle@ www.linuxidc.com ...
随机推荐
- 这个Linux命令是干什么的?
笔者遇到一个命令,觉得挺不好懂的. find . –type f –exec dd if={} of=/dev/null bs=128K status=none \; 这个命令中: {} 代表着被找到 ...
- RHEL磁盘修复
0. 1.基础工具:e2label /device/xxx [new label name] 显示/设定设备的label名称 2.e2fsck 修复工具,用-b 指定备用的superblock位置 ...
- Java中多环境Logback配置与ELK日志发送
Java中多环境Logback配置与ELK日志发送 一.项目基于SpringBoot实现,引入SpringBoot相关库后,本文还要讲上传到ELK的Logstash,所以需要在pom.xml中加入 ...
- openjudge noi 鸡尾酒疗法
题目链接:http://noi.openjudge.cn/ch0105/18/ 总时间限制: 1000ms 内存限制: 65536kB 描述 鸡尾酒疗法,原指“高效抗逆转录病毒治疗”(HAART),由 ...
- 【转】redis 消息队列发布订阅模式spring boot实现
最近做项目的时候写到一个事件推送的场景.之前的实现方式是起job一直查询数据库,看看有没有最新的消息.这种方式非常的不优雅,反正我是不能忍,由于羡慕本身就依赖redis,刚好redis 也有消息队列的 ...
- Asp.Net WebAPI及相关技术介绍(含PPT下载)
此PPT讲述了Asp.Net WebAPI及相关Web服务技术发展历史. 共80多页,Asp.Net WebAPI在讲到第36页的时候才会出现,因为这个技术不是凭空产生的,它有着自己的演变进化的历史. ...
- memcached配置 启动
memcached:http://memcached.org/ libevent:http://libevent.org/ #下载包 cd /opt wget https://github.com/d ...
- FFmpeg: AVPacket 结构体分析
AVPacket是FFmpeg中很重要的一个数据结构,它保存了解封装之后,解码之前的数据(注意:仍然是压缩后的数据)和关于这些数据的一些附加信息,如显示时间戳(pts).解码时间戳(dts).数据时长 ...
- 嵌入式开发之精确延时---多线程延时阻塞精度asm("nop") nanosleep usleep sleep select
http://blog.csdn.net/lile777/article/details/45503087
- thinkphp5 memcached 安装、调用、链接
环境 linux memcached1.5.9 (memcached安装在虚拟机192.168.70.164) wampserver集成环境 thinkphp5 php7 步骤一:linux安装me ...