天天看點

對oracle資料庫的簡單練習

知識點一 oracle 不能直接設定主鍵自增

對oracle資料庫的簡單練習

圖檔在這裡,可以看到。并沒有mysql那樣有主鍵遞增

要實作主鍵遞增,要用到序列和觸發器的組合

首先放出我建立的資料表

對oracle資料庫的簡單練習

建立序列

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的一條記錄)

測試加結果

對oracle資料庫的簡單練習
對oracle資料庫的簡單練習

自動加上,成功。

知識點二

– 存儲過程 不應用 select 語句中 執行 應該 單獨在pl/sql 塊裡執行

– 函數 裡不能有update delete insert 語句 這些應放在存儲過程中執行 可以在select語句中調用

最後把練習寫出的幾個oracle存儲過程和函數分享下來

  1. 觸發器add_createdate在添加使用者時觸發 自動添加使用者建立日期
對oracle資料庫的簡單練習
  1. 函數LOGINCHECK 檢查使用者名密碼知否對應 對應傳回1,否則傳回0,出現異常情況傳回2
對oracle資料庫的簡單練習
  1. 最後一次登入的時間,根據使用者名添加 相當于日志功能
對oracle資料庫的簡單練習
  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;