Oracle代码块详解,oracle 代码块 习题

--课前测

declare

type emp_record_type is record(

ename emp.ename%type,

empno emp.empno%type,

dname dept.dname%type

);

type emp_table_type is table of emp_record_type

index by binary_integer;

v_emp emp_table_type;

begin

select e.ename,e.empno,d.dname bulk collect into v_emp from emp e inner join dept d on e.deptno=d.deptno;

for v_i in 1..v_emp.count

loop

dbms_output.put_line('员工号:'||v_emp(v_i).empno||'员工姓名:'||v_emp(v_i).ename||'部门号'||v_emp(v_i).dname);

end loop;

end;

--游标

declare

type emp_record_type is record(

ename emp.ename%type,

empno emp.empno%type,

dname dept.dname%type

);

type emp_table_type is table of emp_record_type

index by binary_integer;

v_emp emp_table_type;

cursor c is select e.ename,e.empno,d.dname from emp e inner join dept d on e.deptno=d.deptno;

begin

for v_emp in c

loop

dbms_output.put_line('员工号:'||v_emp.empno||'员工姓名:'||v_emp.ename||'部门号'||v_emp.dname);

end loop;

end;

--1,写函数和过程,输入三角形三个表的长度。在控制台打印三角形的面积。

--过程

create or replace procedure pro_area(

v_a number,v_b number,v_c number

)

is

v_p number(10,2);

v_area number(10,2);

v_if number(10,2);

begin

v_p:=(v_a+v_b+v_c)/2;

v_if:=v_p*((v_p-v_a)*(v_p-v_b)*(v_p-v_c));

if v_if>0 then

v_area:=sqrt(v_if);

dbms_output.put_line('三角形的面积是:'||v_area);

else

dbms_output.put_line('你输入的三角形不存在');

end if;

end;

declare

v_a number(8,2):=&请输入第一条边;

v_b number(8,2):=&请输入第二条边;

v_c number(8,2):=&请输入第三条边;

begin

pro_area(v_a,v_b,v_c);

end;

--函数

create or replace function fun_area( v_a number,v_b number,v_c number)

return varchar2

is

v_sout varchar2(100);

v_p number(10,2);

v_area number(10,2);

v_if number(10,2);

begin

v_p:=(v_a+v_b+v_c)/2;

v_if:=v_p*((v_p-v_a)*(v_p-v_b)*(v_p-v_c));

if v_if>0 then

v_area:=sqrt(v_if);

v_sout:='三角形的面积是:'||v_area;

else

v_sout:='你输入的三角形不存在';

end if;

return v_sout;

end;

declare

v_sout varchar2(100);

v_a number(8,2):=&请输入第一条边;

v_b number(8,2):=&请输入第二条边;

v_c number(8,2):=&请输入第三条边;

begin

v_sout:=fun_area(v_a,v_b,v_c);

dbms_output.put_line(v_sout);

end;

--2,写一个过程,输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

create or replace procedure pro_dept_test1(v_deptno number)

is

v_dname dept.dname%type;

v_total dept.deptno%type;

v_avg emp.sal%type;

begin

select dname,count(e.empno),avg(sal+nvl(comm,0))into v_dname,v_total,v_avg from emp e

inner join dept d on e.deptno=d.deptno where

e.deptno=v_deptno group by d.dname;

dbms_output.put_line('部门名称为'||v_dname||'部门总人数为'||v_total||'人,平均工资为'||v_avg||'元');

exception

when no_data_found then

dbms_output.put_line('您输入的部门编号不存在');

end;

declare

v_deptno dept.deptno%type:=&请输入部门编号;

begin

pro_dept_test1(v_deptno);

end;

--3,编写一个存储过程,输入一个员工编号,输出该员工的员工编号,员工姓名,部门名称。

create or replace procedure pro_emp_test1(v_empnoin number)

is

ename emp.ename%type;

empno emp.empno%type;

dname dept.dname%type;

begin

select e.ename,e.empno,d.dname into ename,empno,dname from emp e inner join dept d on e.deptno=d.deptno and e.empno=v_empnoin;

dbms_output.put_line('员工号:'||empno||'员工姓名:'||ename||'部门号'||dname);

end;

declare

v_empno emp.empno%type:=&请输入员工编号;

begin

-- 调用存储过程

pro_emp_test1(v_empno);

exception

when no_data_found then

dbms_output.put_line('输入的员工编号不存在');

end;

--4编写一个存储过程,输出所有员工及其部门领导的姓名、员工号及部门号。

create or replace procedure pro_emp_test2

is

type emp_record_type is record(

ename emp.ename%type,

mname emp.ename%type,

empno emp.empno%type,

deptno emp.deptno%type

);

type emp_table_type is table of emp_record_type

index by binary_integer;

v_emp emp_table_type;

begin

select ename,nvl((select e2.ename from emp e2 where e1.mgr=e2.empno),'无'),empno,deptno

bulk collect into v_emp from emp e1;

for v_i in 1..v_emp.count

loop

dbms_output.put_line('员工姓名:'||v_emp(v_i).ename||',部门领导姓名:'||v_emp(v_i).mname

||',员工号:'||v_emp(v_i).empno||',部门编号:'||v_emp(v_i).deptno);

end loop;

end;

call pro_emp_test2();

标签:end,代码,number,empno,emp,oracle,习题,type,deptno

来源: https://www.cnblogs.com/yanyunpiaomaio/p/10839371.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值