某pl/sql培训练习题
1、?寫一個(gè)存儲過程,向表中隨機(jī)插入1000條記錄
SerialNo:使用序列方式,自增長。
Filepath:使用隨機(jī)插入6個(gè)字母
Partid: 使用隨機(jī)4位數(shù)字
StaffNo:從YTCZ060001……. YTCZ060020 中隨機(jī)抽取
RecordTime:從2011年8月1日之前的6個(gè)月中隨機(jī)抽取。
2、寫一個(gè)程序塊,循環(huán)調(diào)用500次此存儲過程,保證數(shù)據(jù)表中存儲50萬條記錄。
3、寫一個(gè)存儲過程,刪除3個(gè)月前的數(shù)據(jù)。
4、寫一個(gè)job,每隔30天凌晨2點(diǎn)整,系統(tǒng)執(zhí)行“刪除3個(gè)月前數(shù)據(jù)”的存儲過程。
--下面的結(jié)果僅供參考:
(SerialNo:使用序列方式,自增長。)
1.創(chuàng)建一個(gè)序列
-- Create sequence
? create sequence seq_class
? minvalue 1
? maxvalue 100000000000
? start with 201101
? increment by 1
? cache 20;
.序列的使用
?? select seq_class.nextval from dual;?? --使用下個(gè)值
?? select seq_class.currval from dual;?? --使用當(dāng)前值
.刪除序列
? drop SEQUENCE seq_class;
2.錄音表:
create table recordfile(
?????? SerialNo?? VARCHAR2(200) primary key,
?????? FilePath?? VARCHAR2(400),
?????? Partid???? Varchar2(40),?
?????? StaffNo?? VARCHAR2(100),?
?????? RecordTime?DATE
);
3.存儲過程,向表中隨機(jī)插入1000條記錄
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;
/
4、?寫一個(gè)程序塊,循環(huán)調(diào)用500次此存儲過程,保證數(shù)據(jù)表中存儲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('循環(huán)調(diào)用500次此存儲過程');
? end;???
/
5、?寫一個(gè)存儲過程,刪除3個(gè)月前的數(shù)據(jù)。
?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 ;
/
6、寫一個(gè)job,每隔30天凌晨2點(diǎn)整,執(zhí)行刪除數(shù)據(jù)的存儲過程。
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;
? DBMS_JOB.SUBMIT(JobID, 'p_delete_threedata;', trunc(sysdate,'DD')+1+2/24, 'sysdate+30');
? COMMIT;
END;
/
?
轉(zhuǎn)載于:https://blog.51cto.com/srsunbing/631137
總結(jié)
以上是生活随笔為你收集整理的某pl/sql培训练习题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 养牛的前景分析(养牛的前景)
- 下一篇: mvn -U clean eclipse