oracle整理笔记

数据库对象:
1.函数(方法):
    function

2.触发器:
    trigger

3.表:
    table

4.索引:
    index

5.视图:
    view

6.序列:
    sequence

7.用户:
    user

8.同义词:
    synonym

9.表空间:
    tablespace

授权:
    grant ... to


撤销权限:
    revoke ... from


Oracle学习重点:
1.标识列(序列+触发器)
2.分页sql代码

sqlserver的数据类型:
1.字符串:
    varchar

2.整数:
    int

3.小数:
    float/money

4.时间:
    datetime

5.布尔:
    bit

Oracle的数据类型:
1.字符串:
    varchar2

2.整数/小数:
    number(p,s) p:精度  s:小数位数 
    例如 number(5,2) 123.45

3.日期时间:
    date

--创建表
    create table tb_0723(
              sid number primary key,
              sname varchar2(50),
              ssex varchar2(10)
    )

六大约束:
1.主键
2.非空
3.检查
4.唯一
5.外键
6.默认

--创建表空间
    create tablespace tbs_0723
    datafile 'D:\app\0723.dbf'
    size 50M

--创建用户
    create user lx
    identified by 123
    default tablespace tbs_0723

--授权
    grant connect,resource to lx

--撤销
    revoke connect from lx

数据库:让数据持久性的
    SqlServer
登录用户:
        创建库==》创建表
        一个用户对应多个库
Oracle
        创建数据库:
            创建用户==》指定表空间
        一个库对应多个用户    

伪列 :
    rownum,rowid

分页案例:
      每页3条数据
       第一页:1~3
       第二页:4~6
       第三页:7~9
       页码:pageIndex  1     2   3
       每页数据条数:pageSize     3
       开始:pageStart        1   4   7
       结束:pageEnd          3   6   9
       上一页的最后一条+1 就是本页的第一条
       pageStart=(pageIndex-1)*pageSize+1
       pageEnd=pageIndex*pageSize

函数:
日期函数:
获取月份:
    add_months

获取当前系统时间:
    sysdate

获取当前时间:
    current_date
取整(四舍五入):
    round

取整  只取年月日:
    trunc
    
本月最后一天:
    last_day

下周几为几号:
    next_day(星期一、星期二、星期三、星期四、星期五、星期六、星期日)

字符串函数:
小转大:
    upper

大转小:
    lower

去掉左边的指定字符:
    ltrim

去掉右边的指定字符:
    rtrim

在字符串中第一次出现的位置:
    instr

截取:
    substr

连接:
    concat、||

哈希码:
    ascii    

编码对应的字符:
    chr

字符串字符长度:
    length

左填充:
    lpad

右填充:
    rpad

判断 字符为什么
    decode('b',    'a','周'     ,    'b',2    ,    'c','嗯呐'    ,    'd',4) 

反序:
    reverse

数学函数:
向上取最小的整数:
    ceil

取整数位:
    floor、trunc

四舍五入:
    round

求余:
    mod

开平方:
    sqrt

正负数:
    sign

nvl:
    nvl(comm,0)--工资+奖金

查询每个员工的工资减去1250:案例
select ename, decode(sign(sal-1250),-1,'不纳税',0,'刚刚好',1,'纳税') from emp;

代码块:
        begin
          .....
        end
        
打印语句:
    dbms_output.put_line('');

赋值:
     into、:=
扫描器:键盘输入  &
字段类型:
     %type

行类型:    
       %rowtype

条件分支:
一种可能
        if 条件  then
              
       end if;
            
两种可能
       if 条件 then
              
       else
              
      end if;
            
三种 或 三种以上可能
      if 条件 then
              
     elsif 条件 then
            
      ....
     else ..
     end if;
            
case:
       case  when  then
       case 变量
       when 值1 then 代码1;
       when 值2 then 代码2;
       when 值3 then 代码3;
       ....
       else 代码n;
                
      end case;

 循环:loop
       begin
    <<循环体名字>>[可写可不写]
         loop
           打印语句
    循环条件
      判断语句
         end loop;--停止
       end;

案例:循环打印1--100之间所有的整数
    declare i number:=1;
    begin
          <<a>>--给循环起名字为a
      loop
            dbms_output.put_line(i);
        i:=i+1;--每循环一次 i的值加1
        exit a when i=101;
         end loop;
    end;
while:
         while(循环条件) loop
                    循环体;
        打印语句
         end loop;

案例:循环打印1--100之间所有的整数
    declare i number:=1;
    begin
        while(i<=100) loop
                   dbms_output.put_line(i);
                       i:=i+1;   
          end loop;
    end;

for:
    begin
               for i in 数字..数字(循环条件、从小到大) loop
        打印语句
    end loop;
    end;
案例:循环打印1--100之间所有的整数
    begin
               for i in 1..100 loop
          dbms_output.put_line(i);
      end loop;
    end;


mod:余
案例:求出1--100之间所有能被3 和 5整除的数字之和
    declare  i number:=1;
    begin
     loop
              if(mod(i,3)=0)then
                  if(mod(i,5)=0)then
           dbms_output.put_line(i);
                  end if;
               end if;
          i:=i+1;
          exit when i>100;
      end loop;
    end;
异常:
         no_data_found
         too_many_rows

自定义异常:
    1、定义行类型
    2、查询数据
    3、打印定义
    4、exception when 异常  then
    5、打印输出
案例:
    declare mrow emp%rowtype;
    begin
      select*into mrow from emp where empno =6666;
      dbms_output.put_line(mrow.ename);
      exception when too_many_rows then
       dbms_output.put_line('查询数据太多');
       when no_data_found then
       dbms_output.put_line('查询不到数据');
    end;
抛出异常:
    1、定义变量
    2、定义异常
    3、抛出异常
    4、处理异常:
        案例:查询指定工号的员工工资,如果工资低于1250 就抛出工资太低异常
        declare
        msal number;--定义变量存工资
        me exception;--定义异常
        begin
              select sal into msal from emp where empno=7566;
                if(msal < 1250) then
                      raise me;--抛出异常
          end if;
              exception when me then--处理异常
                dbms_output.put_line('工资有点不高呀');
        end;

函数function:
    1、创建一个函数
    2、返回值类型
    3、定义变量
    4、查询语句
    5、返回值

案例:
    1、无参:定义一函数查询到工号为7369的员工姓名 
        create  or replace function  getname
          return  varchar2  is
          sname varchar2(20);
        begin
             select ename into sname from emp where empno=7369;
          return sname;
        end;

    2、有参:定义一个函数,接收工号,返回这个员工的工资
        create or replace function getsal(sid number)
           return number is --返回值类型
           msal number;--定义变量
        begin
              select sal into msal from emp where empno=sid;
          return msal;--返回值
        end;
使用函数:
    1、无参:
    select 对象名() from dual;

    2、有参:
    select 对象名(值) from dual;

 游标:
    隐式游标
    显式游标:遍历多行数据
    REF游标(自定义游标)

    打印:属性、一行中的属性
    
    隐式游标:SQL
      属性:
        %found:受影响行数>0就为true
        %notfound:受影响行数<1就为true
        %rowcount:受影响行数
        %isopen:判断游标是否打开,始终为false
        
      显式游标:
    1、定义游标
    2、打开游标
    3、提取数据
    4、关闭游标
案例:
        declare
        cursor 游标名 is sql语句;
        begin
          open 游标;
          loop
            fetch 游标 into 变量;
            exit when 游标%notfound;
            dbms_output.put_line();
          end loop;
          close 游标
        end;

嵌套:
loop(显式游标):
    1、定义变量
    2、定义游标
    3、定义第二个变量
    4、sql语句
    5、打开游标
    6、提取游标数据
    7、打印语句
    8、打开第二个变量的游标
    9、提取第二个变量的数据
    10、再次打印语句
    11、关闭两个游标
    
案例:打印部门编号的同时,打印该部门的所有员工信息
   declare
   dr dept%rowtype;--部门变量
   cursor dc is select * from dept;--部门游标
   er emp%rowtype;--员工信息变量
   cursor ec(dno number) is select * from emp where deptno=dno;--员工信息游标\
   begin
       open dc;--打开部门游标
       loop
           fetch dc into dr;--提取部门游标中的数据
         exit when dc%notfound;
            dbms_output.put_line('部门编号:'||dr.deptno);--打印部门编号、每得到一个部门编号,就查询该部门下的员工
               open ec(dr.deptno);--打开员工游标
             loop
              fetch ec into er;--提取员工游标中的数据
           exit when ec%notfound;
               dbms_output.put_line('     姓名:'||er.ename||'    工资:'||er.sal);
         end loop;
            close ec;--关闭员工游标
              end loop;
        close dc;--关闭部门游标
    end;


for:
    1、定义游标
    2、定义第二个游标
    3、for循环,打开游标,提取数据
    
案例:打印部门编号的同时,打印该部门的所有员工信息
    declare
    cursor dc is select * from dept;--部门游标
    cursor ec(dno number) is 
       select * from emp where deptno=dno;--员工游标
   begin
      for dr in dc loop--循环 打开游标 提取数据
        dbms_output.put_line(dr.deptno);
         for er in ec(dr.deptno) loop
         dbms_output.put_line('    姓名:'||er.ename||'   工资:'||er.sal);
         end loop;
      end loop;
    end;

序列:sequence 
创建序列
    create sequence 名字;

获取序列的当前值:
    select 名字.currval from dual;

获取序列的下一个值:
    select 名字.nextval from dual;

删除序列
    drop sequence 名字;

同义词:synonym 
案例:创建私有同义词
    create synonym sb for scott.emp;

共有同义词:public synonym
创建公有同义词:
    create public synonym sss for scott.emp; 

    
创建视图:
       案例:
    create view v_info
     as
    select a.empno,a.ename,a.deptno,b.dname,b.loc 
    from emp a
     join dept b
    on a.deptno=b.deptno

授权视图:
grant create view to scott;

连接外键:references 表名(字段名)

提交事物:commit;

回滚(撤回):rollback

多行数据插入表二中:
    insert into 表1 select * from 表2;

复制数据及表字段并创建表2:
    create table 表2as select *from 表1

默认单词:default

默认为系统时间:
    to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')

去重:distinct

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值