oracle的初步学习

来源:互联网 发布:java两个时间相减 编辑:程序博客网 时间:2024/05/21 07:00

       1.写在 前面的话, 因为一般不会出现 不学 一点 sql 的知识就直接写oracle 的情况,于是 笔者 以下 只是 粗略的 列举 oracle 和 sql server 的区别,

    2. 首先 oracle 是比 sqls(sql server)稍微 复杂的 系统,用于处理的也是 十分大型 的项目,自然 语句方面就会 比 sqls 多一点,而且 更加的 细致一点,安全方面 也是划分了十分 细致的 权限,顶级的 用户: sys --system 两个高级 "管理者",scott---hr 两个“普通的”

    3.直接上 代码:

         ORACLE---用户方面的 操作:

              3.1允许 增加数据库用户:
       create user test11(名字) identified by test (密码)
             3.2用户授权:
                      grant connect,resource,dba to test11;
                      grant sysdba to test11;

             3.3--改密码
                 alter user system indentified by test;
            ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
          

            16、更改数据库用户的密码:(将sys与system的密码改为test.)
alter user sys indentified by test;

》》》》》》》》》》》》》》》》》》》》》》》》》》》

4.  表的 操作 :  

             --增加一列
              alter table product add nowtime date;
              --改变某一列的 数据类型
             alter table product modify nowtime varchar2(10)

--代替
select replace('abcdaaa','a','h') from dual-- 把 a 全部 换成了h

      时间的 问题-- 一直是 十分的 麻烦的 一个 方面:

          1. 格式问题:update product set nowtime='12-2月-16'where id=1

      2. select add_months(sysdate,1) 新日期 from dual;--把月份加1

               --  sysdate 就是 系统的 时间

算月份的差值 和 时间中的 某一部分
select MONTHS_between(sysdate,'03-8月-15') 新日期 from dual;
select sysdate ,extract(year from sysdate)年from dual; 
 

3.  --转化函数
select  to_char(sysdate,'yyyy-mm-dd')日期,
sysdate-1   差值 from dual;
字符串 转化为 int: select to_number('123')+2 from dual
显示格式的转化: select to_date('2011/01/02','yyyy-mm-dd')     from dual

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

  5. 到了 十分的 复杂 的聚合函数部分:

    5.1  小计:select a.deptno,a.ename
  ,sum(a.sal) from emp a 
  group by rollup(a.deptno,a.ename)--小计,把 一列的数值 相加

     正常 情况下 : 

5.2: 得到一个无重复的 

      select decode -- 就是一个 if -else if
             (lag(deptno)over(order by deptno), 
              deptno,
              to_number(null),-- decode 提出 相同重复的 字段
              deptno )dept,--lag获取上一个 字段的 n 行数据 
              ename 
              from emp


    5.3   --每个部门 》1981年的人数
       select count(*),e.deptno as dd from emp e
           where extract(year from e.hiredate)='1981'
                    group by e.deptno-- 还是 和sqls 一样的,group 和count max 这种 必须同时存在, 可以没有 count之类,



  5.4:排位的 rank()

  select sal,
 rank()over(--统计的区间
  order by sal desc )
rank from emp s where s.deptno=10 --根据 什么排位 的对象
 
 

  5.5:

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..

6.新出现的 一些类型

::;

1.dept%rowtype--某一行一样的 类型

 declare 
v_de dept%rowtype;--dept 的所有列
begin--开始赋值的时候 就需要用begin
v_de.deptno:=50; -- := 就是 赋值
v_de.dname:='adminstrator';
v_de.loc:='beijing';
insert into dept values v_de;
end;


table 类型四个很 有趣的 类型



declare
 type etno is table of number(4);-- 这个 etno 就是 只有一个int 列 
 type etname is table of emp.ename%type; -- 一个 和 ename一样类型的列
 v_no etno;-- 定义一个 v_no的类型就是 etno 的 数组
 v_name etname;
 begin
      v_no(1):=7521; -- 直接赋值
      v_no(0):=7369;
      v_no(2):=7566;
 select ename into v_name(0) from emp-- 还是 赋值
    where empno=v_no(0);
     select ename into v_name(1) from emp
    where empno=v_no(1);
     select ename into v_name(2) from emp
    where empno=v_no(2);
dbms_output.put_line('编号:'||v_name(0));
end;

》》》》》》》》》》》》》》》》》》》》》》》

7.面向对象的 sql

-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
--面对对象的 sql
create or replace type b_b as object
(
  price number(5),
  quantity varchar2(14), 
  realpay number(5),-- 实际付款 

// 定义的方法
  member function getMustpay return number,--应付款
);
-- 给 对象类实体 一个定义


create or replace type body b_b is
 member function getMustpay return number
 is -- 给 方法 具体的 实现 语句
 begin
    return self.price*self.quantity;
    end;
end;


declare v_o:=b_b(5,12,100);
begin                                   调用
 dbms_output.put_line('是:'|| v_o.getMustpay);
end;


》》》》》》》》》》》》》》》》》》》》

7.自增和分页和 控制流程的语句

7.1 循环:loop

declare
i number(1):=1;
begin
loop
  i:=i+1; dbms_output.put_line('第2:'||i);
  if i>5 then
    dbms_output.put_line('out');
    exit;
  end if;
  
end loop;
end;

   ————————————————————————————
declare
i number(1):=1;
begin
while i<5 loop
  i:=i+1;
end loop;
  dbms_output.put_line(i);
end;
   》》自增
序列:

create sequence seqq2
start with 1
increment by 1;


create table tmp2(
id number(2) primary key
)
insert into tmp2 values(
seqq2.nextval)
》》》》》》》》》》》》》》》》》》》

分页:select * from tmp2 where 
       id not in 
    (select * from tmp2 a where rownum<3)
     and rownum<2*2        所有的表都存在的 一个 rownum

8. 一个 循环的写法:

 declare
begin
       for i in 1..100 loop
         dbms_output.put_line('编号的值为:'||i); 
       end loop;  
end;

9.--批量的 插入
create table tb_d(
id number(6) primary key
);
declare 
type t_r is record(
 id number(6),
 value varchar2(10)
);
type t_t_t is table of t_r
index by binary_integer;
v_t t_t_t;
begin 
  for i in 1..500 loop 
    v_t(i).id:=i;
  end loop;
  forall i in v_t.first..v_t.last loop
  insert into tb_d values(v_t(i)id);
  end;

10.

select * from tb_v;
alter table tb_v add sex number(2);
commit;-- 注意 一定要提交

 删除 某一列的
alter table tb_v drop column sex;



0 0
原创粉丝点击