数据库实习

  1 create table usr
  2 (
  3     usr_id varchar2(10),
  4     nackname varchar2(15) not null,
  5     name varchar2(15) not null,
  6     gender varchar2(10),
  7     age number,
  8     sno varchar2(15) unique,
  9     school varchar2(20),
 10     college varchar2(20),
 11     major varchar2(20),
 12     class varchar2(20),
 13     phone varchar2(15) unique,
 14     email varchar2(20) unique,
 15     credit number,
 16     pwd varchar2(20) not null,
 17     logtime date,
 18     constraint pk_usr primary key (usr_id),
 19     constraint ck_age check (age > 0 and age <100),
 20     constraint ck_credit check (credit >= 0 and credit <= 100),
 21     constraint ck_gender check (gender in ('ÄÐ', 'Å®'))
 22 );
 23 
 24 create table goods
 25 (
 26     goods_id varchar2(10),
 27     name varchar2(15) not null,
 28     type varchar2(15),
 29     seller varchar2(10) not null,
 30     describe varchar2(100),
 31     buytime date,
 32     price number not null,
 33     clickrate number,
 34     state varchar2(10),
 35     constraint pk_goods primary key (goods_id),
 36     constraint fk_seller foreign key (seller) references usr(usr_id),
 37     constraint ck_price check (price >= 0),
 38     constraint ck_clickrate check (clickrate >= 0),
 39     constraint ck_state check (state in ('ÔÚÊÛ', 'ÊÛ³ö', 'δÉϼÜ'))
 40 );
 41 
 42 create table deal
 43 (
 44     buyer_id varchar2(10),
 45     goods_id varchar2(10),
 46     ordertime date,
 47     arrivaltime date,
 48     score number,
 49     constraint pk_buyer_goods primary key(buyer_id, goods_id),
 50     constraint fk_buyer foreign key (buyer_id) references usr(usr_id),
 51     constraint fk_goods foreign key (goods_id) references goods(goods_id),
 52     constraint ck_score check (score >= 0 and score <= 10),
 53     constraint ck_arrivaltime check (arrivaltime >= ordertime)
 54 );
 55 
 56 create table login
 57 (
 58     log_id varchar2(10),
 59     usr_id varchar2(10),
 60     logintime date,
 61     logouttime date,
 62     constraint pk_log primary key(log_id),
 63     constraint fk_usr foreign key (usr_id) references usr(usr_id),
 64     constraint ck_logout check (logouttime > logintime)
 65 );
 66 
 67 create table oos
 68 (
 69     oos_id varchar2(10),
 70     oosname varchar2(15) not null,
 71     oostype varchar2(15) not null,
 72     oosprice number,
 73     oosbuyer varchar2(10) not null,
 74     constraint pk_oos primary key (oos_id),
 75     constraint fk_oosbuyer foreign key (oosbuyer) references usr(usr_id),
 76     constraint ck_oosprice check (oosprice > 0)
 77 );
 78 
 79 create table favorites
 80 (
 81     fav_id varchar2(10),
 82     name varchar2(15) not null,
 83     createtime date,
 84     owner varchar2(10),
 85     constraint pk_fav primary key (fav_id),
 86     constraint fk_owner foreign key (owner) references usr(usr_id)
 87 );
 88 
 89 create table collection
 90 (
 91     coll_id varchar2(10),
 92     fav_id varchar2(10) not null,
 93     goods varchar2(10) not null,
 94     colltime date,
 95     constraint pk_coll primary key (coll_id),
 96     constraint fk_fav foreign key (fav_id) references favorites(fav_id),
 97     constraint fk_fav_goods foreign key (goods) references goods(goods_id)
 98 );
 99 
100 create table returnlist
101 (
102     re_id varchar2(10),
103     buyer varchar2(10),
104     seller varchar2(10),
105     reason varchar2(100),
106     price number not null,
107     constraint pk_re primary key (re_id) ,
108     constraint fk_re_buyer foreign key(buyer) references usr(usr_id),
109     constraint fk_re_seller foreign key (seller) references usr(usr_id),
110     constraint ck_re_price check (price > 0) 
111 );
112 
113 create table commlist
114 (
115     comm_id varchar2(10),
116     buyer varchar2(10),
117     seller varchar2(10),
118     result varchar2(50),
119     commtime date,
120     constraint pk_comm primary key (comm_id),
121     constraint fk_comm_buyer foreign key(buyer) references usr(usr_id),
122     constraint fk_comm_seller foreign key (seller) references usr(usr_id)
123 );
124 
125 create table valuelist
126 (
127     val_id varchar2(10),
128     goods_id varchar2(10),
129     price number not null,
130     constraint pk_val primary key (val_id),
131     constraint fk_val_goods foreign key (goods_id) references goods(goods_id),
132     constraint ck_val_price check (price > 0)
133 );
134 
135 create table pwdcglist
136 (
137     pwd_id varchar2(10),
138     usr_id varchar2(10),
139     oldpwd varchar2(20),
140     newpwd varchar2(20),
141     cgtime date,
142     constraint pk_pwd primary key (pwd_id),
143     constraint fk_pwd_usr foreign key (usr_id) references usr(usr_id),
144     constraint ck_newpwd check (newpwd != oldpwd)
145 );
146 
147 create table sugglist
148 (
149     sugg_id varchar2(10),
150     usr_id varchar2(10),
151     sugg_mess varchar2(100),
152     dispose varchar2(50),
153     constraint pk_sugg primary key (sugg_id),
154     constraint fk_sugg_usr foreign key (usr_id) references usr(usr_id)
155 );
156 
157 create table discountlist
158 (
159     dis_id varchar2(10),
160     goods varchar2(10),
161     disprice number,
162     bgtime date,
163     edtime date,
164     constraint pk_dis primary key (dis_id),
165     constraint pk_disgoods foreign key (goods) references goods(goods_id),
166     constraint ck_disprice check (disprice > 0),
167     constraint ck_edtime check (edtime >= bgtime)
168 );
169 
170 create table unshelve
171 (
172     unshe_id varchar2(10),
173     goods varchar2(10),
174     unshetime date,
175     constraint pk_unshe primary key (unshe_id),
176     constraint fk_unshe_goods foreign key (goods) references goods(goods_id)
177 );
178 
179 create table browselist
180 (
181     usr varchar2(10),
182     goods varchar2(10),
183     browsetime date not null,
184     constraint pk_browse primary key (usr, goods),
185     constraint fk_browse_usr foreign key (usr) references usr(usr_id),
186     constraint fk_browse_goods foreign key (goods) references goods(goods_id)
187 );
188 
189 create table commentlist
190 (
191     comment_id    varchar2(10),
192     buyer varchar2(10),
193     goods varchar2(10),
194     message varchar2(100),
195     commtime date,
196     constraint pk_comment primary key (comment_id),
197     constraint fk_comment_buyer foreign key (buyer) references usr(usr_id),
198     constraint fk_comment_goods    foreign key (goods) references goods(goods_id)
199 );
200 
201 create view deal_view(buyer_nackname, seller_nackname, goods_name, goods_type, goods_describe, deal_price, deal_time, score)
202 as
203 select A.nackname, B.nackname, goods.name, goods.type, goods.describe, goods.price, deal.ordertime, deal.score
204 from usr A, usr B, goods, deal
205 where A.usr_id = deal.buyer_id and
206       goods.goods_id = deal.goods_id and
207       B.usr_id = goods.seller;
208 
209 create view goods_onsale_view(goods_name, goods_type, goods_describe, price, clickrate, seller_nackname, seller_credit, seller_buytime)
210 as
211 select goods.name, goods.type, goods.describe, goods.price, goods.clickrate, usr.nackname, usr.credit, goods.buytime
212 from usr, goods
213 where goods.seller = usr.usr_id and
214       goods.state = 'ÔÚÊÛ';
215 
216 create view discount_view(name, type, describe, discount_price, startTime, endTime,  clickrate, seller_nackname, seller_credit, seller_buytime)
217 as
218 select goods.name, goods.type, goods.describe, discountlist.disprice, discountlist.bgtime, discountlist.edtime, goods.clickrate, usr.nackname, usr.credit, goods.buytime
219 from usr, goods, discountlist
220 where discountlist.goods = goods.goods_id and
221       goods.seller = usr.usr_id;
222 
223 create view collection_view(favorites_name, goods_name, goods_type, goods_describe, price, collect_time)      
224 as
225 select favorites.name, goods.name, goods.type, goods.describe, goods.price, collection.colltime
226 from favorites, collection, goods
227 where favorites.fav_id = collection.fav_id and
228       collection.goods = goods.goods_id;
229 
230 create or replace trigger insert_deal
231     before insert on deal 
232     for each row
233 begin 
234     update goods
235     set goods.state = 'ÊÛ³ö'
236     where goods.goods_id = :new.goods_id;    
237 end;
238 
239 create or replace trigger insert_unshelve
240     before insert on unshelve
241     for each row
242 begin
243     update goods
244     set goods.state = 'δÉϼÜ'
245     where goods.goods_id = :new.goods;
246 end;
247 
248 create or replace trigger insert_discountlist
249     before insert on discountlist
250     for each row
251 begin
252     update goods
253     set goods.price = :new.disprice
254     where goods.goods_id = :new.goods;
255 end;
256 
257 create or replace trigger insert_pwdcglist
258     before insert on pwdcglist
259     for each row
260 begin
261     update usr
262     set usr.pwd = :new.newpwd
263     where usr.usr_id = :new.usr_id;
264 end;
265 
266 create or replace procedure query_onsale_byName(
267     v_goods_name in goods_onsale_view.goods_name%type,
268     out_return out sys_refcursor
269 )as
270 begin 
271     open out_return for 'select *
272     from goods_onsale_view
273     where v_goods_name = goods_onsale_view.goods_name';
274 end;    
275 
276 create or replace procedure query_onsale_byType(
277     v_goods_type in goods_onsale_view.goods_type%type,
278     out_return out sys_refcursor
279 )as
280 begin 
281     open out_return for 'select *
282     from goods_onsale_view
283     where v_goods_type = goods_onsale_view.goods_type';
284 end;
285 
286 --1)ÐÂÓû§×¢²áÒµÎñ
287 create or replace procedure new_usr(
288     v_usr_id in usr.usr_id%type,
289     v_nackname in usr.nackname%type,
290     v_name in usr.name%type,
291     v_gender in usr.gender%type,
292     v_age in usr.age%type,
293     v_sno in usr.sno%type,
294     v_school in usr.school%type,
295     v_college in usr.college%type,
296     v_major in usr.major%type,
297     v_class in usr.class%type,
298     v_phone in usr.phone%type,
299     v_email in usr.email%type,
300     v_credit in usr.credit%type,
301     v_pwd in usr.pwd%type,
302     v_logtime in usr.logtime%type
303 )as
304 begin 
305     insert into usr
306     values(v_usr_id, v_nackname, v_name, v_gender, v_age, v_sno, v_school, v_college, v_major, v_class, v_phone, v_email, v_credit, v_pwd, v_logtime);
307     commit;
308 end;    
309 
310 create or replace procedure new_goods(
311     v_goods_id in goods.goods_id%type,
312     v_name in goods.name%type,
313     v_type in goods.type%type,
314     v_seller in goods.seller%type,
315     v_describe in goods.describe%type,
316     v_buytime in goods.buytime%type,
317     v_price in goods.price%type,
318     v_clickrate in goods.clickrate%type,
319     v_state in goods.state%type
320 )as
321 begin 
322     insert into goods
323     values(v_goods_id, v_name, v_type, v_seller, v_describe, v_buytime, v_price, v_clickrate, v_state);
324     commit;
325 end;
326 
327 create or replace procedure new_deal(
328     v_buyer_id in deal.buyer_id%type,
329     v_goods_id in deal.goods_id%type,
330     v_ordertime in deal.ordertime%type,
331     v_arrivaltime in deal.arrivaltime%type,
332     v_score in deal.score%type
333 )as
334 begin 
335     insert into deal
336     values(v_buyer_id, v_goods_id, v_ordertime, v_arrivaltime, v_score);
337     commit;
338 end;
339 
340 create or replace procedure new_login(
341     v_log_id in login.log_id%type,
342     v_usr_id in login.usr_id%type,
343     v_logintime in login.logintime%type,
344     v_logouttime in login.logouttime%type
345 )as
346 begin 
347     insert into login
348     values(v_log_id, v_usr_id, v_logintime, v_logouttime);
349     commit;
350 end;
351 
352 -- declare 
353 --  a login.log_id%type:='1';
354 --     b login.usr_id%type:='2';
355 --     c login.logintime%type:=to_date('2017/01/12', 'yyyy/mm/dd');
356 --     d login.logouttime%type:=to_date('2017/01/13', 'yyyy/mm/dd');
357 -- begin 
358 --   new_login(a, b, c, d);
359 --   dbms_output.put_line(a||b||c||d);
360 -- end;
361 
362 create or replace procedure new_oos(
363     v_oos_id in oos.oos_id%type,
364     v_oosname in oos.oosname%type,
365     v_oostype in oos.oostype%type,
366     v_oosprice in oos.oosprice%type,
367     v_oosbuyer in oos.oosbuyer%type
368 )as
369 begin 
370     insert into oos(oos_id, oosname, oostype, oosprice, oosbuyer)
371     values(v_oos_id, v_oosname, v_oostype, v_oosprice, v_oosbuyer);
372     commit;
373 end;
374 
375 create or replace procedure new_favorites(
376     v_fav_id in favorites.fav_id%type,
377     v_name in favorites.name%type,
378     v_createtime in favorites.createtime%type,
379     v_owner in favorites.owner%type
380 )as
381 begin 
382     insert into favorites
383     values(v_fav_id, v_name, v_createtime, v_owner);
384     commit;
385 end;
386 
387 -- declare 
388 --  a favorites.fav_id%type:='1';
389 --     b favorites.name%type:='СÃ×ÊÖ»·';
390 --     c favorites.createtime%type:=to_date('2017/01/12', 'yyyy/mm/dd');
391 --     d favorites.owner%type:='3';
392 -- begin 
393 --   new_favorites(a, b, c, d);
394 --   dbms_output.put_line(a||b||c||d);
395 -- end;
396 
397 create or replace procedure new_collection(
398     v_coll_id in collection.coll_id%type,
399     v_fav_id in collection.fav_id%type,
400     v_goods in collection.goods%type,
401     v_colltime in collection.colltime%type
402 )as
403 begin 
404     insert into collection
405     values(v_coll_id, v_fav_id, v_goods, v_colltime);
406     commit;
407 end;
408 
409 create or replace procedure new_returnlist(
410     v_re_id in returnlist.re_id%type,
411     v_buyer in returnlist.buyer%type,
412     v_seller in returnlist.seller%type,
413     v_reason in returnlist.reason%type,
414     v_price in returnlist.price%type
415 )as
416 begin 
417     insert into returnlist
418     values(v_re_id, v_buyer, v_seller, v_reason, v_price);
419     commit;
420 end;
421 
422 create or replace procedure new_commlist(
423     v_comm_id in commlist.comm_id%type,
424     v_buyer in commlist.buyer%type,
425     v_seller in commlist.seller%type,
426     v_result in commlist.result%type,
427     v_commtime in commlist.commtime%type
428 )as
429 begin 
430     insert into commlist
431     values(v_comm_id, v_buyer, v_seller, v_result, v_commtime);
432     commit;
433 end;
434 
435 create or replace procedure new_valuelist(
436     v_val_id in valuelist.val_id%type,
437     v_goods_id in valuelist.goods_id%type,
438     v_price in valuelist.price%type
439 )as
440 begin 
441     insert into valuelist
442     values(v_val_id, v_goods_id, v_price);
443     commit;
444 end;
445 
446 create or replace procedure new_pwdcglist(
447     v_pwd_id in pwdcglist.pwd_id%type,
448     v_usr_id in pwdcglist.usr_id%type,
449     v_oldpwd in pwdcglist.oldpwd%type,
450     v_newpwd in pwdcglist.newpwd%type,
451     v_cgtime in pwdcglist.cgtime%type
452 )as
453 begin 
454     insert into pwdcglist
455     values(v_pwd_id, v_usr_id, v_oldpwd, v_newpwd, v_cgtime);
456     commit;
457 end;
458 
459 create or replace procedure new_sugglist(
460     v_sugg_id in sugglist.sugg_id%type,
461     v_usr_id in sugglist.usr_id%type,
462     v_sugg_mess in sugglist.sugg_mess%type,
463     v_dispose in sugglist.dispose%type
464 )as
465 begin 
466     insert into sugglist
467     values(v_sugg_id, v_usr_id, v_sugg_mess, v_dispose);
468     commit;
469 end;
470 
471 create or replace procedure new_discountlist(
472     v_dis_id in discountlist.dis_id%type,
473     v_goods in discountlist.goods%type,
474     v_disprice in discountlist.disprice%type,
475     v_bgtime in discountlist.bgtime%type,
476     v_edtime in discountlist.edtime%type
477 )as
478 begin 
479     insert into discountlist
480     values(v_dis_id, v_goods, v_disprice, v_bgtime, v_edtime);
481     commit;
482 end;
483 
484 create or replace procedure new_unshelve(
485     v_unshe_id in unshelve.unshe_id%type,
486     v_goods in unshelve.goods%type,
487     v_unshetime in unshelve.unshetime%type
488 )as
489 begin 
490     insert into unshelve
491     values(v_unshe_id, v_goods, v_unshetime);
492     commit;
493 end;
494 
495 create or replace procedure new_browselist(
496     v_usr in browselist.usr%type,
497     v_goods in browselist.goods%type,
498     v_browsetime in browselist.browsetime%type
499 )as
500 begin 
501     insert into browselist
502     values(v_usr, v_goods, v_browsetime);
503     commit;
504 end;
505 
506 create or replace procedure new_commentlist(
507     v_comment_id in commentlist.comment_id%type,
508     v_buyer in commentlist.buyer%type,
509     v_goods in commentlist.goods%type,
510     v_message in commentlist.message%type,
511     v_commtime in commentlist.commtime%type
512 )as
513 begin 
514     insert into commentlist
515     values(v_comment_id, v_buyer, v_goods, v_message, v_commtime);
516     commit;
517 end;
518 
519 --Óû§¸ÄÃÜÂëÒµÎñ
520 create or replace procedure change_pwd(
521   v_usr in usr.nackname%type,
522   v_oldpwd in usr.pwd%type,
523   v_newpwd in usr.pwd%type
524 )is v_pwd usr.pwd%type;
525   v_cnt number;
526   v_usr_id usr.usr_id%type;
527 begin
528   select usr_id, pwd into v_usr_id, v_pwd
529   from usr
530   where nackname = v_usr;
531   if(v_pwd = v_oldpwd) then
532     update usr
533     set pwd = v_newpwd
534     where nackname = v_usr;
535 
536     select count(pwd_id) into v_cnt
537     from pwdcglist;
538 
539     new_pwdcglist(to_char(v_cnt+1, '00000'),  v_usr_id, v_oldpwd, v_newpwd, sysdate);
540   end if;
541 end;
542 
543 declare 
544     a usr.nackname%type:='A';
545     b usr.pwd%type:='000000';
546     c usr.pwd%type:='123456';
547 begin 
548   change_pwd(a, b, c);
549   dbms_output.put_line(a||' '||b||' '||c);
550 end;
551 
552 --Âò¼Òä¯ÀÀ²éѯҵÎñ
553 create or replace procedure browse_goods(
554       v_usr in usr.nackname%type,
555       v_goods in goods.name%type
556 )is v_cnt number;
557       v_usr_id usr.usr_id%type;
558       v_type goods.type%type;
559       v_seller usr.name%type;
560       v_describe goods.describe%type;
561       v_buytime goods.buytime%type;
562       v_price goods.price%type;
563       v_clickrate goods.clickrate%type;
564       v_goods_id goods.goods_id%type;
565 cursor c is
566       select goods.goods_id, goods.type, usr.nackname, goods.describe, goods.price, goods.buytime, goods.clickrate
567       from goods, usr
568       where goods.name like '%'||v_goods||'%' and
569             goods.state = 'ÔÚÊÛ' and
570             goods.seller = usr.usr_id;
571 begin 
572       select usr_id into v_usr_id 
573       from usr
574       where nackname = v_usr;
575       open c;
576       fetch c into v_goods_id, v_type, v_seller, v_describe, v_price, v_buytime, v_clickrate;
577       if(c%notfound)then
578            select count(oos_id) into v_cnt
579         from oos;
580         insert into oos values(to_char(v_cnt+1, '00000'), v_goods, 'δ֪', null, v_usr_id);
581         dbms_output.put_line('out of store');
582         --commit;
583       else  
584           dbms_output.put_line(v_goods||' '||v_type||' '||v_seller||' '||v_describe||' '||v_price||' '||v_buytime||' '||v_clickrate);
585           new_browselist(v_usr_id, v_goods_id, sysdate);
586           loop 
587             fetch c into v_goods_id, v_type, v_seller, v_describe, v_price, v_buytime, v_clickrate;
588             exit when c%notfound;
589             dbms_output.put_line(v_goods||' '||v_type||' '||v_seller||' '||v_describe||' '||v_price||' '||v_buytime||' '||v_clickrate);
590             new_browselist(v_usr_id, v_goods_id, sysdate);
591           end loop;
592     end if;
593 end;    
594 
595 
596 declare 
597       a usr.nackname%type:='A';
598     b goods.name%type:='Сѧ';
599 begin 
600       browse_goods(a, b);
601   --dbms_output.put_line(a||' '||b);
602 end;
原文地址:https://www.cnblogs.com/Penn000/p/6306428.html