1、编写过程,输入三角形三个表的长度。在控制台打印三角形的面积。
create or replace procedure pro_s(v_a number,v_b number,v_c number) is
-- 声明变量
v_sum number(10,2);
begin
-- 计算三角形的面积
v_sum:=1/4*sqrt((v_a+v_b+v_c)*(v_a+v_b-v_c)*(v_a+v_c-v_b)*(v_b+v_c-v_a));
-- 打印输出
dbms_output.put_line('三角形的面积是:'||v_sum);
end;
-- 调用
call pro_s(3,4,5);
2、编写函数,输入三角形三个表的长度。在控制台打印三角形的面积
create or replace function fun_s(v_a number,v_b number,v_c number)return number is
-- 声明函数
v_sum number(10,2);
begin
-- 计算圆的面积
v_sum:=1/4*sqrt((v_a+v_b+v_c)*(v_a+v_b-v_c)*(v_a+v_c-v_b)*(v_b+v_c-v_a));
-- 返回值
return v_sum;
end;
declare
-- 声明变量 变量和 function中的 类型相同
v_sum number(10,2);
begin
v_sum:=fun_s(3,4,5);
dbms_output.put_line('三角形的面是:'||v_sum);
end;
3、写一个过程,输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)
create or replace procedure pro_emp(v_deptno number,v_dname out varchar2, v_count out number,v_vag out number)
is
begin
select d.dname,count(e.ename),avg(sal+nvl(comm,0))into v_dname,v_count,v_vag from emp e inner join dept d on e.deptno=d.deptno where e.deptno=v_deptno group by e.deptno,d.dname;
end;
declare
---v_deptno emp.deptno%type;
v_dname dept.dname%type;
v_count emp.deptno%type;
v_vag emp.sal%type;
begin
pro_emp(10,v_dname,v_count ,v_vag);
dbms_output.put_line('员工姓名'||v_dname||'总人数'||v_count||'平均值'||v_vag);
end;
4,编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号
create or replace procedure pro_emp3 is
type emp_record_type is record(
empno emp.empno%type,
ename emp.ename%type,
sal emp.sal%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 empno,ename,sal,deptno bulk collect into v_emp from emp;
for v_i in v_emp.first ..v_emp.last
loop
dbms_output.put_line('员工编号'||v_emp(v_i).empno||
'员工姓名'||v_emp(v_i).ename||
'基本工资'||v_emp(v_i).sal||
'部门编号'||v_emp(v_i).deptno);
end loop;
end;
begin
pro_emp3();
end;
5、编写一个存储过程,输入一个员工编号,输出该员工的员工编号,员工姓名,部门名称。
create or replace procedure pro_emp1(v_empno number,v_emno out number,v_ename out varchar2,v_dname out varchar2)is
begin
select e.empno,e.ename,d.dname into v_emno,v_ename,v_dname from emp e inner join dept d on d.deptno=e.deptno where empno=v_empno;
end;
declare
v_emno emp.empno%type;
v_ename emp.ename%type;
v_dname dept.dname%type;
--v_deptno emp.deptno%type;
begin
pro_emp1(7369,v_emno,v_ename,v_dname) ;
dbms_output.put_line('员工编号'||v_emno||'员工姓名'||v_ename||'部门名称'||v_dname);
end;
6、编写一个存储过程,输出所有员工及其部门领导的姓名、员工号及部门号。
create or replace procedure pro_emp2 is
type emp_record_type is record(
empno emp.empno%type,
ename emp.ename%type,
deptno emp.deptno%type,
mname emp.ename%type);
type emp_table_type is table of emp_record_type
index by binary_integer;
v_emp emp_table_type;
begin
select e.empno,e.ename,e.deptno,m.ename mname bulk collect into v_emp from emp e inner join emp m on e.empno=m.mgr;
for v_i in v_emp.first .. v_emp.last
loop
dbms_output.put_line('员工编号:'||v_emp(v_i).empno||
'员工姓名:'||v_emp(v_i).ename||
'领导姓名:'||v_emp(v_i).mname||
'部门编号:'||v_emp(v_i).deptno);
end loop;
end;
begin
pro_emp2();
end;