某pl/sql培訓練習題

一、 寫一個存儲過程,向表中隨機插入1000條記錄
SerialNo:使用序列方式,自增加。
Filepath:使用隨機插入6個字母
Partid: 使用隨機4位數字
StaffNo:從YTCZ060001……. YTCZ060020 中隨機抽取
RecordTime:從2011年8月1日以前的6個月中隨機抽取。
二、寫一個程序塊,循環調用500次此存儲過程,保證數據表中存儲50萬條記錄。
三、寫一個存儲過程,刪除3個月前的數據。
四、寫一個job,每隔30天凌晨2點整,系統執行「刪除3個月前數據」的存儲過程。dom

--下面的結果僅供參考:ide

(SerialNo:使用序列方式,自增加。)
1.建立一個序列
-- Create sequence
  create sequence seq_class
  minvalue 1
  maxvalue 100000000000
  start with 201101
  increment by 1
  cache 20;
.序列的使用
   select seq_class.nextval from dual;   --使用下個值
   select seq_class.currval from dual;   --使用當前值
.刪除序列
  drop SEQUENCE seq_class;oop

2.錄音表:
create table recordfile(
       SerialNo   VARCHAR2(200) primary key,
       FilePath   VARCHAR2(400),
       Partid     Varchar2(40), 
       StaffNo   VARCHAR2(100), 
       RecordTime DATE
);server

3.存儲過程,向表中隨機插入1000條記錄three

create or replace procedure p_random_corder
 is
  MAXRECORDS CONSTANT INT :=1000;
  I INT :=2;
BEGIN
  FOR I IN 2..MAXRECORDS LOOP
    insert into recordfile(serialno,filepath,partid,staffno,recordtime)
    values('2011'||seq_class.nextval,
        upper(chr(trunc(dbms_random.value(97,122))))||
        upper(chr(trunc(dbms_random.value(97,122))))||
        upper(chr(trunc(dbms_random.value(97,122))))||
        upper(chr(trunc(dbms_random.value(97,122))))||
        upper(chr(trunc(dbms_random.value(97,122))))||
        upper(chr(trunc(dbms_random.value(97,122)))),
        'YTCZ'||trunc(dbms_random.value(60001,60020)),
        floor(abs(trunc(dbms_random.value(1000,9999)))) ,
     to_date('2011-0'||
     case when  trunc(dbms_random.value(2,8))=2 then '2'||'-'||floor(abs(trunc(dbms_random.value(1,28))))
             when  trunc(dbms_random.value(2,8))=3 then '3'||'-'||floor(abs(trunc(dbms_random.value(1,31))))
             when  trunc(dbms_random.value(2,8))=4 then '4'||'-'||floor(abs(trunc(dbms_random.value(1,30))))
             when  trunc(dbms_random.value(2,8))=5 then '5'||'-'||floor(abs(trunc(dbms_random.value(1,31))))
             when  trunc(dbms_random.value(2,8))=6 then '6'||'-'||floor(abs(trunc(dbms_random.value(1,30))))
             when  trunc(dbms_random.value(2,8))=7 then '7'||'-'||floor(abs(trunc(dbms_random.value(1,31))))
     end,'yyyy-mm-dd')
     ) ;   
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('成功插入記錄');
  commit; 
END;rem

/it

四、 寫一個程序塊,循環調用500次此存儲過程,保證數據表中存儲50萬條記錄。
set serveroutput on ;
 
  declare
    --i integer;
  begin
    --i := 1;
    for i in 1..500 loop
       p_random_corder;
     --commit;
    end loop;
    dbms_output.put_line('循環調用500次此存儲過程');
  end;   
/
五、 寫一個存儲過程,刪除3個月前的數據。
 create or replace procedure p_delete_threedata
 is
 begin
     delete from recordfile where  RecordTime = trunc(add_months(sysdate,-3));
     commit;
    
 exception
     when others then
     rollback;   
 end ;
/
六、寫一個job,每隔30天凌晨2點整,執行刪除數據的存儲過程。
DECLARE
        JobNum NUMBER(5) := 0;
        JobID  NUMBER(5);
BEGIN
  SELECT COUNT(*) INTO JobNum FROM DBA_JOBS WHERE UPPER(SUBSTRB(WHAT,1,30)) = UPPER('p_delete_threedata');
  IF JobNum > 0 THEN
    SELECT NVL(JOB,0) INTO JobID FROM DBA_JOBS WHERE UPPER(SUBSTRB(WHAT,1,30)) = UPPER('p_delete_threedata');
    IF JobID > 0 THEN
      DBMS_JOB.REMOVE(JobID);
    END IF;
  END IF;io

  DBMS_JOB.SUBMIT(JobID, 'p_delete_threedata;', trunc(sysdate,'DD')+1+2/24, 'sysdate+30');
  COMMIT;
END;
/
 table

相關文章
相關標籤/搜索