Oracle编程基础(DDL(数据定义语言)、DML(数据操作语言)、ORACLE函数)

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;

猜你喜欢

转载自blog.csdn.net/java_zhong1990/article/details/39613261#comments_28979377