Oracle编程的三个方面:DDL(数据定义语言)、DML(数据操作语言)、ORACLE函数
DDL(数据定义语言)
1.命令行进入
cmd
sqlplus/nolog 打开工作区
conn username/password@服务名 as sysdba(他是一个身份);
show user 显示用户
shutdown immediate (强制关闭数据库)关闭数据库 注:当使用该命令后,监听程序被强制关闭。
startup force 启动数据库
2.创建表空间
注(表空间的文件后缀名为dbf 并且指定的目录必须是数据库安装的目录 即 :
create tablespace tbs_tablespacename datafile 'filename' size 100m autoextend on next 10mb
2.1调整表空间的大小
alter database datafile 'filename' resize 新的大小
改变表空间的读写状态 t
alter tablespace tbs_tablespacename read only/wtite;只读/读写
删除表空间
dorp tablespace tbs_tablespacename;
删除表空间里头的数据
dorp tablespace tbs_tablespacename including contents;
3.创建用户
创建一个用户 并指定 使用表空间的大小
create user test identified by 123
default tablespace tbs_school
temporary tablespace temp
quote 5m on tbs_school;(注,指定表使用该表空间的大小)
4.修改用户
alter user userName 属性 属性值
alter user userName default tablespace tbs_
4.删除用户
drop user userName;
5.用户授权
grant DBA to userName ; 三种系统预定义角色: connect resource dba
6.取消授权
revoke DBA from userName;
5.建表
create table tableName(
userid number(20),
username varchar(10);
telephone number(11)
)
6.修改表
更改字段
alter table tablename modify(name varchar2(25),...)
添加字段
alter table tablename add (name varchar2(10));
删除字段
alter table tbl_school drop column (fieldName);
删除表
drop table tableName;
查看表结构
desc tableName;(注:只在命令行窗口中使用)
7.主键约束
一般用于对id的约束
alter table student add constraint pk_id primary key(id);
唯一约束 一般用于对姓名的约束
alter table student(表名) add constraint u_id(约束名) unique (name字段名);
检查约束 对字段的域进行约束
alter table student add constraint chk_age check(age>10);
8.引用完整性约束
alter table 子表
dd constraint 约束名 foreing key(子表的外键)
references 主表 (主表的主键);
alter table 学员信息表
add constraint fk_子表名_外键 foreing key (stu_cla_id)
references 班级信息表 (cla_id);
删除约束
alter table student(表名) drop constraint pk_id(约束名);
查看约束
select * from user_constraints where table_name='表名大写';
select constraint_name from user_constraints where table_name='表名大写';
9.用户解锁
在oracle中以数据库管理员的省份 对普通用户进行解锁:
alter user scott
account unlock;
DML(数据操作语言)
1. 插入
insert into school(id,name,studentCount,teacherCount,creatDate) values('00001','北大青鸟北大公学' 200,20,to_date('2006-时12-12','yyyy-mm-dd'));
按顺序添加表中的内容 不需要字段的名称
insert into school('00002','北大青鸟北大公学' 200,20,to_date('2006-时12-12','yyyy-mm-dd'));//sysdate
2.查询
select * from es_user where usertype = 2 and
(
realname = '李四' or realname = '张三'
);//查询 张三和 李四的会员信息
select * from es_user where usertype is null; //查询字段名是否为空字符
// select * from es_user where realname like'
李%';
// select * from es_user where realname like'
李_';
% 能够匹配0到多个字符
- 能任意匹配单个字符
// select * from es_user where realname
in('张三','张晓红')
select * from school;
2.1 查询部分字段
select name, createDate from tbl_school;
查询学员人数在100到200之间
select * from tbl_school where studentCount between 100 and 200;
select * from tbl_school where studentCount>100 and studentCount<200;
2.2 升序排序
select * from tbl_school order by createDate asc(可省略)/desc;
// asc 升序排列
// desc 降序排列
//
distinct 查一组唯一无序的对象
select distinct * from es_user
2.3 别名查询
select u.realname as "用户真实姓名" ,u.username
as "用户真实姓名" from es_user u where u.usertype = 2;
3. 复制表
insert into tbl_school_pk
select t.*,sysdate from tbl_school t;当前系统时间内复制表
insert into tbl_school select id,name,studentCount ,teacherCount from tbl_school_pk;
4. 修改表
update tbl_school set studentCount = 256 ,teacherCount = 30 where id='00001';
update
(select d.qj ,r.creater from uf_dianzhanghr d left join requestbase r on d.requestid= r.id) set
qj =creater
5.提交表
commit;
6.删除表
delete from tbl_school where id = '0002'; commit 提交
delete from tbl_school 删除所有表
truncate table tbl_school 彻底清除 rollback 回滚
7.对表进行备份
insert into user_bak select * from es_user where ueertype = 2;
DCL(数据库控制语言) grant rovoke commit rollback
8.用户角色权限
8.1 权限
对象:dba_sys_privs 所有系统权限
对象:user_sys_privs 用户拥有的系统权限
查询当前用户所拥有的系统权限:select * from user_sys_privs;
8.2 授以系统权限
grant 系统权限 to user
8.3 常见的系统权限
create session 连接系统权限
create table 创建表
create view 创建视图
create procedure 创建过程
create sequence 创建序列
授以对象的权限 grant select on table1 to user; 将查询表1 的对象权限赋 给用户user
撤销对象 revoke select on table1 from user; 撤销用户对表一的查询权限
对象权限和数据字典 select * from user_tab_privs;
8.4 角色权限 授以用户
grant connect ,resource to user;
resource 角色:操作数据库的权限
connect 角色: 连接数据库的权限
DBA 角色:具备数据库管理员的权限
8.5 自定义角色
create role role1;
grant create session,create table to role1;
用户角色
grant role1 to user; 将角色赋给用户(用户拥有role1的权限)
用户角色与数据字典
dba_role_privs 所有用户角色
user_role_privs 当前用户角色
角色权限与数据字典
role_sys_privs 所有角色的系统权限
ORACLE函数
1.orcl 的三中连接方式
1. sqlplus --> 用户名-->密码
2.sqlplus scott/123@orcl
2.sqlplus/nolog conn system/123@orcl as sysdba
2.查询表空间
select * from dba_data_files;
3 字段类型
数值数据类型: binary_double oracle 10G提供的一种新的数据类型用于存储一个双精度的64位的浮点数。
日期数据类型:date 存储表中的日期和时间的数据、 timestamp 存储日期的年、月、日以及时间的分和秒
大对象数据类型:clob 大批量的文本、blob 二进制对象比如 图片等。
4 函数
select p,name ,
concat(p.price,'元') p.description from es_product p;
//拼接字符串
select p.name ,
p.price||元 from es_product p;
select p.name ,
nvl(p.content,'暂无详细描述') from es_product p;
trunc(column|expression,n)
//截取函数
select trunc(45.926) from daul ; 45
select trunc(45.926,2) from dual; 45.92
select trunc(45.926,-1) from dual; 40
select round(45.926) from daul ; 46
//4舍5入函数
select round(45.926,2) from dual; 45.93
select round(45.926,-1) from dual; 50
select round(p.price,2) as "四舍五入后的价格" , p.name as"商品名称"
from es_product p;
select sysdate from dual
//日期函数:
select extract (year from sysdate) from dual
select extract (month from sysdate) from dual
select extract (day from sysdate) from dual
insert into es_product values(1000,2,apple,3783,null,null,sysdate,700);
select extract(year from p.saledate)||'-'|| extract(monthfrom p.saledate)||'-'||extract(day from p.saledate) from es_product p;
//转换函数
select
to_char(p.saledate,'yyyy-MM-DD') from es_product p;
select * from es_product p where
to_date('2012-2-29','yyyy-MM-DD') < p.saledate and
to_date('2012-4-1','yyyy-MM-DD') > p.saledate
//聚合函数
select
sum(p.stockcount),p.sort_id from es_product p
group by p.sort_id;
select
count(p.stockcount),p.sort_id from es_product p group by p.sort_id;
select
max(p.price),p.sort_id from es_product p group by p.sort_id;
//子查询返回结果为单行
select id, name, price from es_product where sort_id = (select id from es_sort where sortname='图书');
select id, name,price from es_product where(select avg(price) from tb_sort )>price
5 存储过程的创建
create [or replace] procedure procudure_name
[{parameter_list}]
{ISIAS}
[local declarations]
begin
executable statments
[EXCEPTION]
executable handlers
END [produce_name];
5.1 demo:
create or replace procedure
find_emp(emp_no number) --创建一个存储过程 带一参数
AS
empname varchar2(20);
begin
select em.name into empname from employees em where em.id =emp_no;
dbms_output.put_line('雇员姓名'||empname);
exception
when no_data found then
dbms_output.put_line('雇员编号为找到');
end find_emp;
5.2 执行存储过程
execute procedure_name(param_list);
set serverountput on --显示存储过程
execute find_emp(3);
5.3 存储过程的参数模式
in 默认模式 如果参数未指定默认指定int模式
out
in out
5.4 存储过程的受权
1.grant excute on procedure_name to user
2.grant excute on procedure to user with grent option
6 ORACLE存储过程DEMO
create or replace procedure PRO_OA_KQ_SYNRECORDSDATA as
begin
begin--请假
insert into oa_kq_records(id,no,begintime,endtime,type,typeid,days,hours,savedate,reqdate,totalhours,LEAVEANDBUESSID)
select SE_OA_KQ_RECORDSID.NEXTVAL,h.objno,lz.sjqjkssj,lz.sjqjjssj,1,lz.qjlx ,lz.sjqjts,lz.sjqjss,to_char(sysdate,'yyyy-MM-dd'),l.reqdate,lz.sjqjts*8+lz.sjqjss,lz.id
from uf_kq_leave l
left join uf__kq_leave_zib lz on l.requestid = lz.requestid
left join uf_kq_xjdzib xj on lz.id=xj.sqr
left join humres h on h.id = l.reqman
left join requestbase rb on rb.id = lz.requestid
where l.flag=0 and rb.isfinished =1 and rb.isdelete=0;
update uf_kq_leave l set l.flag =1 where l.id in (select l.id from uf_kq_leave l left join requestbase r on l.requestid=r.id and l.flag=0 and r.isfinished =1 and r.isdelete=0);
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
end;
begin--销假
insert into oa_kq_records(id,no,begintime,endtime,type,typeid,days,hours,requestid,savedate,reqdate,totalhours)
select SE_OA_KQ_RECORDSID.NEXTVAL,h.objno,kqx.sjqjkssj,kqx.sjqjjssj,2,kqx.qjlx,kqx.sjqjts,kqx.sjqjss,kqx.sqr,to_char(sysdate,'yyyy-MM-dd'), kqxz.reqdate, kqx.sjqjts*8+kqx.sjqjss
from uf_kq_xjsqd kqxz
left join uf_kq_xjdzib kqx on kqxz.requestid=kqx.requestid
left join humres h on h.id = kqx.reqman
left join requestbase rb on rb.id=kqxz.requestid
where kqxz.flag=0 and rb.isfinished=1 and rb.isdelete=0;
----用销请假的id更新 reuqest
update oa_kq_records set requestid=1 where LEAVEANDBUESSID in(select kqx.sqr
from uf_kq_xjsqd kqxz
left join uf_kq_xjdzib kqx on kqxz.requestid=kqx.requestid
left join humres h on h.id = kqx.reqman
left join requestbase rb on rb.id=kqxz.requestid
where kqxz.flag=0 and rb.isfinished=1 and rb.isdelete=0);
update uf_kq_xjsqd l set l.flag =1 where l.id in (select l.id from uf_kq_xjsqd l left join requestbase r on l.requestid=r.id and l.flag=0 and r.isfinished =1 and r.isdelete=0);
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
end;
begin--出差
insert into oa_kq_records(id,no,begintime,endtime,type,days,savedate,reqdate,LEAVEANDBUESSID)
select SE_OA_KQ_RECORDSID.NEXTVAL,h.objno,kqwz.sjcckssj,kqwz.sjccjssj,3,kqwz.sjccts ,to_char(sysdate,'yyyy-MM-dd'),kqw.reqdate,kqwz.id
from uf_kquf_workout kqw
left join uf_kquf_workout_zib kqwz on kqw.requestid = kqwz.requestid
left join humres h on h.id= kqw.reqman
left join uf_kq_xccd_zib xc on xc.sqr=kqwz.id
left join requestbase rb on rb.id = kqwz.requestid
where kqw.flag=0 and rb.isfinished=1 and rb.isdelete=0;
update uf_kquf_workout l set l.flag =1 where l.id in (select l.id from uf_kquf_workout l left join requestbase r on l.requestid=r.id and l.flag=0 and r.isfinished =1 and r.isdelete=0);
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
end;
begin--销出差
insert into oa_kq_records(id,no,begintime,endtime,type,days,requestid,savedate,reqdate)
select SE_OA_KQ_RECORDSID.NEXTVAL,h.objno,sccz.sjcckssj,sccz.sjccjssj,4,sccz.sjccts,sccz.sqr,to_char(sysdate,'yyyy-MM-dd'),kqsc.reqdate
from uf_kq_xccsqd kqsc
left join uf_kq_xccd_zib sccz on kqsc.requestid=sccz.requestid
left join humres h on h.id= kqsc.reqman
left join requestbase rb on rb.id = kqsc.requestid
where kqsc.flag=0 and rb.isfinished=1 and rb.isdelete=0 ;
----用的销出差id更新 reuqest
update oa_kq_records set requestid=1 where LEAVEANDBUESSID in(select sccz.sqr
from uf_kq_xccsqd kqsc
left join uf_kq_xccd_zib sccz on kqsc.requestid=sccz.requestid
left join humres h on h.id= kqsc.reqman
left join requestbase rb on rb.id = kqsc.requestid
where kqsc.flag=0 and rb.isfinished=1 and rb.isdelete=0);
update uf_kq_xccsqd l set l.flag =1 where l.id in (select l.id from uf_kq_xccsqd l left join requestbase r on l.requestid=r.id and l.flag=0 and r.isfinished =1 and r.isdelete=0);
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
end;
begin--加班核对
insert into oa_kq_records(id,no,begintime,endtime,type,hours,savedate,reqdate)
select SE_OA_KQ_RECORDSID.NEXTVAL,h.objno,jbzi.beintime,jbzi.endtime,5,jbzi.jbsc1,to_char(sysdate,'yyyy-MM-dd'),jbz.reqdate
from uf_kq_jbhdzb jbz
left join uf_kq_jbhdzib jbzi on jbz.requestid=jbzi.requestid
left join humres h on h.id= jbzi.reqman
left join requestbase rb on rb.id =jbz.requestid
where jbz.flag=0 and rb.isfinished=1 and rb.isdelete=0;
update uf_kq_jbhdzb l set l.flag =1 where l.id in (select l.id from uf_kq_jbhdzb l left join requestbase r on l.requestid=r.id and l.flag=0 and r.isfinished =1 and r.isdelete=0);
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
end;
begin--补打卡
insert into oa_kq_records(id,no,bktime,bkqdtime,bkqttime,type,savedate,reqdate)
select SE_OA_KQ_RECORDSID.NEXTVAL,h.objno,bkzi.bkrq,bkzi.qdsj,bkzi.qtsj ,6,to_char(sysdate,'yyyy-MM-dd'),bkz.reqdate
from uf_kq_specialattendancezb bkz
left join uf_kq_specialattendancezib bkzi on bkz.requestid=bkzi.requestid
left join humres h on h.id= bkzi.reqman
left join requestbase rb on rb.id =bkz.requestid
where bkz.flag=0 and rb.isfinished=1 and rb.isdelete=0;
update uf_kq_specialattendancezb l set l.flag =1 where l.id in (select l.id from uf_kq_specialattendancezb l left join requestbase r on l.requestid=r.id and l.flag=0 and r.isfinished =1 and r.isdelete=0);
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
end;
end PRO_OA_KQ_SYNRECORDSDATA;