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

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;
 
原文地址:https://www.cnblogs.com/hph1728390/p/10846705.html