Oracle数据库综合试题

表结构说明:

create table employee

(

id number(10) not null, -- 员工工号

salary number(10,2) default 0 not null, --薪水

name varchar2(24) not null --姓名

);

--开启控制台输出

 set serverout on;

1.创建序列seq_employee,该序列每次取的时候它会自动增加,从1开始计数,不设最大值,并且一直累加,不循环。

-- Create sequence 

create sequence SEQ_EMPLOYEE

minvalue 1

maxvalue 9999999999999999999999999999

start with 1

increment by 1

cache 20;

 

 

1. 写一个PL/SQL块,插入表user.employee100条数据。插入该表中字段id用序列seq_employee实现,薪水和姓名字段可以任意填写。

 

declare

 i number;

begin

  for i in 1 .. 100

  loop

  insert into employee values(seq_employee.nextval,1950+i,匿名||to_char(i));

  commit;

  end loop;

end;

/

 

3.写一个语句块,在语句块中定义一个显式游标,按id升序排列,打印表employee中前十条数据。

declare

 --定义一个显式游标,按id升序排列

 cursor c is select id,salary,name from(select * from employee order by idwhere rownum<11;

 v_record c%rowtype;

begin

 open c;

   loop

      fetch c into v_record;

      exit when c%notfound;

      dbms_output.put_line(to_char(v_record.id)||‘,‘||to_char(v_record.salary)||‘,‘||v_record.name);

    end loop;

  close c;

end;

/

4.创建存储过程p_employee,输入员工薪水范围,返回员工工号、姓名、薪水结果集,结果集按员工薪水升序排列。

create or replace procedure p_employee(iminsalary in number,imaxsalary in number)

 is

   begin

   for x in(select id,salary,name from(select * from employee where salary between iminsalary and imaxsalary) order by salary)

   loop

       dbms_output.put_line(to_char(x.id)||to_char(x.salary)||x.name);

   end loop;

 end;

/

--调用存储过程

call p_employee(1951,1956);

exec p_employee(1951,1952);

5.创建函数f_employee实现更新员工薪水的功能,将薪水低于2000且姓王的员工薪水加5%,其他不变,更新成功则返回0,否则返回1

create or replace function f_employee return number

is

begin

       update employee set salary=salary+salary*0.05 where salary<2000 and name like %‘;

       commit;

       if sql%rowcount=0 then

        return 1;

       else

        return 0;

       end if;

end;

/

6.写一个匿名语句块,用于执行函数f_employee,并打印执行该函数的结果。

declare a number;

begin

 a:=f_employee();

 dbms_output.put_line(to_char(a));

end;

/

 

7.创建存储过程p_create_emp,用于判断表employee是否存在,如果存在则删除该表。

create or replace procedure p_create_emp

is

  v_count number;

begin

 select count(*) into v_count from user_tables where table_name=‘EMPLOYEE‘;

 if v_count=0 then

  return;

 else

  execute immediate ‘drop table employee‘;

 end if;

 end;

 /

8.写一个匿名语句块,用于执行存储过程p_create_emp

exec p_create_emp;

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。