主键自增长

a)         创建表

                         i.  有主键,主键自增长

                       ii.   有一个数值类型,数据不能为空

                      iii.   有一个字符串类型,内容随意

b)         写一个存储过程,插入10000条数据

c)         统计这张表的

                         i.  记录数

                       ii.  数据类型字段的平均值、最大值、最小值、汇总求和

           D)将c查询出来的记录,写入另外一张或多张表。


create table users
( id integer primary key,
  name varchar2(20),
  age integer
 );
 


CREATE SEQUENCE seq
 INCREMENT BY 1       -- 每次加几个  
     START WITH 1     -- 从1开始计数  
     NOMAXVALUE       -- 不设置最大值  
     NOCYCLE          -- 一直累加,不循环  
     NOCACHE;
     
CREATE or replace  TRIGGER trig BEFORE
insert ON  users FOR EACH ROW
begin
select seq.nextval into:New.id from dual;
end;   

--insert into users(name,age) values('zhangsan',20);
--select * from users;
--delete from users where id<=6 and id>=1;


create table huizong
(
       id integer primary key,
       v_avg integer,
       v_max integer,
       v_min integer,
       v_sum integer
);

CREATE SEQUENCE seq2
 INCREMENT BY 1       -- 每次加几个  
     START WITH 1     -- 从1开始计数  
     NOMAXVALUE       -- 不设置最大值  
     NOCYCLE          -- 一直累加,不循环  
     NOCACHE;
CREATE or replace  TRIGGER trig2 BEFORE
insert ON  huizong FOR EACH ROW
begin
select seq2.nextval into:New.id from dual;
end;   
create or replace procedure pro_01 is
  i           integer;
  num_of_rows integer; --保存数据条数
  avg_age     integer; --保存年龄平均值
  max_age     integer; --保存年龄最大值
  min_age     integer; --保存年龄最小值
  sum_age     integer; --保存年龄总和
begin
  for i in 1 .. 1000 LOOP
    insert into users (name, age) values ('zhangsan', mod(i, 50) + 10);
    commit;
  END LOOP;
  EXECUTE   IMMEDIATE 'TRUNCATE TABLE huizong';
  
  select count(*), avg(age), max(age), min(age), sum(age)
    into num_of_rows, avg_age, max_age, min_age, sum_age
    from users;
  insert into huizong
    (v_avg, v_max, v_min, v_sum)
  values
    (num_of_rows, max_age, min_age, sum_age);
  commit;

end;


begin
  pro_01;
end;
select * from users;



原文地址:https://www.cnblogs.com/yldf/p/11900194.html