学习pl/sql(语句块)的几个例子

时间:2022-04-22 23:44:26

1.编写一个PL/SQL 程序块以显示所给出雇员编号的雇员的详细信息。
declare
  v1 emp%rowtype; ;/*声明变量v1 %rowtype:使该变量的类型与emp表中的整行相同*/
begin
  select * into v1 from emp where empno=&员工编号; /*将emp表中查询出的结果保存到v1中*/
 
  DBMS_OUTPUT.put_line(v1.empno);
  DBMS_OUTPUT.put_line(v1.ename);
  DBMS_OUTPUT.put_line(v1.job);
  DBMS_OUTPUT.put_line(v1.mgr);
  DBMS_OUTPUT.put_line(v1.hiredate);
  DBMS_OUTPUT.put_line(v1.sal);
  DBMS_OUTPUT.put_line(v1.comm);
  DBMS_OUTPUT.put_line(v1.deptno);
 
end;

/*要想能输出结果,先要执行SQL>set serveroutput on; */

/*执行方法,在pl/sql中,用command window,然后将程序块复制到editor中,*/
/*点一下执行按钮,或者按F8,执行,再到dialog中输入左斜杠/*/
/*如下所示:*/
/*       SQL>                                                  */   
/*         16  /                        */
/*                                   */ 
/*        PL/SQL procedure successfully completed       */


2.编写一个PL/SQL 程序块以计算某个雇员的年度薪水总额
declare
  sumsal emp.sal%type;/*声明变量sumsal emp.sal%type:使该变量的类型与emp表sal字段类型相同*/
begin
  select (sal+nvl(comm,0))*12 into sumsal from emp where empno=&员工编号;/*nvl函数表示如果第一个参数为空值,就返回第二个参数值,否则返回第一个参数*/
  DBMS_OUTPUT.put_line(sumsal);
end;

declare
  sumsal emp.sal%type;
begin
  select (sal+nvl(comm,0))*12 into sumsal from emp where empno=&员工编号;
  DBMS_OUTPUT.put_line('该员工的年度总薪水为:'||sumsal);--(注意输出字符串的格式)
end;


3.按照下列加薪比例执行
   deptno    raise(%age)
      10            5%
      20           10%
      30           15%
      40           20%
    加薪的百分比是按他们现有的薪水为根据的。编写一个PL/SQL程序块以对指定的雇员加薪
declare 
    ndeptno emp.deptno%type;
begin
    select deptno into ndeptno from emp where deptno=&部门号
    case ndeptno
         when 10 then update emp set sal=sal+sal*0.05 where deptno=10;
         when 20 then update emp set sal=sal*1.1 where deptno=20;
         when 30 then update emp set sal=sal*1.15  where deptno=30;
         when 40 then update emp set sal=sal*1.2 where deptno=40;
    end;
end;


declare 
    ndeptno emp.deptno%type;  
begin   
    select deptno into ndeptno from emp where empno=&员工编号;
    case ndeptno
         when 10 then update emp set sal=sal+sal*0.05 where deptno=10;
         when 20 then update emp set sal=sal*1.1 where deptno=20;
         when 30 then update emp set sal=sal*1.15  where deptno=30;
         when 40 then update emp set sal=sal*1.2 where deptno=40;
    end case;
end;

declare 
    ndeptno emp.deptno%type;
    nempno  emp.empno%type;   
begin
    nempno=&员工编号;   
    select deptno into ndeptno from emp where empno=nempno;
    case ndeptno
         when 10 then update emp set sal=sal+sal*0.05 where deptno=10;
         when 20 then update emp set sal=sal*1.1 where deptno=20;
         when 30 then update emp set sal=sal*1.15  where deptno=30;
         when 40 then update emp set sal=sal*1.2 where deptno=40;
    end case;
end;

 


4.编写一个PL/SQL程序块以向"emp"表添加10个新雇员编号
declare
begin
 for i in 1..10
 loop
 insert into emp(empno) values(i);
 end loop;
end;


5.只使用一个变量来解决试验作业5.

6.接受两个数相除并且显示结果。如果第二个数为0,
   则显示消息"didn't your mother tell you not to dibide by zero';
declare
  num1 number;
  num2 number;
  res  number;
begin
  num1:=&第一个数;
  num2:=&第二个数;
  if num2=0 then
    DBMS_OUTPUT.put_line('didn''t your mother tell you not to dibide by zero');
  else
     res:=num1/num2;
     DBMS_Output.put_line(res);
  end if;
end;