对oracle数据库的简单练习

知识点一 oracle 不能直接设置主键自增

对oracle数据库的简单练习_第1张图片
图片在这里,可以看到。并没有mysql那样有主键递增
要实现主键递增,要用到序列和触发器的组合

首先放出我建立的数据表
对oracle数据库的简单练习_第2张图片

创建序列

CREATE SEQUENCE AUTO_ADD_ID INCREMENT BY 2 MAXVALUE 999999999 MINVALUE 1 NOCACHE;

这一句的意思是我创建了一个名字叫 AUTO_ADD_ID的序列,每次自增2,最大999999999,最小1,不缓存。
建立触发器

create or replace TRIGGER USER_AUTO_ID 
BEFORE INSERT ON USERLOGIN for each row
BEGIN
  select auto_add_id.nextval into :new.userid from dual;
END;

auto_add_id.nextval是从序列里拿出下一个值,into :new.userid 意思是把拿出来的值付给,我在insert的时候
将要添加的userid字段的值
(简单来说就是触发器在insert的时候执行,执行从序列里抽取下一个值,付给我想设置的自增字段,针对这个insert的一条记录)

测试加结果
在这里插入图片描述
在这里插入图片描述
自动加上,成功。

知识点二

– 存储过程 不应用 select 语句中 执行 应该 单独在pl/sql 块里执行
– 函数 里不能有update delete insert 语句 这些应放在存储过程中执行 可以在select语句中调用

最后把练习写出的几个oracle存储过程和函数分享下来

  1. 触发器add_createdate在添加用户时触发 自动添加用户创建日期

对oracle数据库的简单练习_第3张图片

  1. 函数LOGINCHECK 检查用户名密码知否对应 对应返回1,否则返回0,出现异常情况返回2

对oracle数据库的简单练习_第4张图片

  1. 最后一次登录的时间,根据用户名添加 相当于日志功能

对oracle数据库的简单练习_第5张图片

  1. 这个代码块是我想的一个全员用户积分成倍增加或减少的功能,然后算出来增加了多少,减少了多少。
create or replace PROCEDURE RICHESINCREASE 
(
  V_INDEX IN NUMBER 
, V_SUM OUT NUMBER 
) 
is 
  cursor riches_cursor is select userid,riches from userlogin ; 
 -- v_index_tem number(10):=1;
BEGIN
  v_sum := 0;
-- 求出增加或减少的积分 
  if v_index >1  then 
     -- 求出 增加或减少总量  
       for c in riches_cursor loop
               v_sum:=v_sum + c.riches*(v_index-1);
               update userlogin set riches = riches*V_INDEX where userid = c.userid;
              end loop; 
  elsif v_index >0 then  
        -- 求出 增加或减少总量  
         for c in riches_cursor loop
                 v_sum:=v_sum + c.riches*(1-v_index);
                 update userlogin set riches = riches*V_INDEX where userid = c.userid;
                end loop; 
  end if;

-- 正负转换           
    if   V_INDEX >=1 then v_sum := v_sum;
     elsif V_INDEX>=0 then v_sum := -v_sum;
    end if;
     
END RICHESINCREASE;

你可能感兴趣的:(oracle,oracle函数,oracle存储过程)