美文网首页
PL/SQL块练习

PL/SQL块练习

作者: 孤意的学习笔记 | 来源:发表于2017-11-06 16:53 被阅读0次

1、自动以输入任意员工编号,输出该员工编号,输出该员工变号、姓名、工资、部门、所在地

declare 
  -- Local variables here
  empno integer;
  ename nvarchar2(20);
  sal float;
  dname nvarchar2(20);
  loc nvarchar2(20);
  i integer;
begin
  -- Test statements here
  select empno,ename,sal,dname,loc into empno,ename,sal,dname,loc from emp join dept on emp.deptno= dept.deptno where empno = &i;
  dbms_output.put_line(empno||' '||ename||' '||sal||' '||dname||' '||loc);
end;

2、自定义输入任意员工编号;如果该员工入职时间大于10年,则奖金加1w,如果该员工入职时间大于5年,奖金加5000,否则不加。最终输出员工编号、姓名、入职时间、原奖金、现奖金

declare 
  -- Local variables here
  empno integer;
  ename nvarchar2(20);
  comm_before integer;
  comm_after integer;
  hiredate date;
  i integer;
  t integer;
begin
  -- Test statements here
  select empno,ename,hiredate,comm into empno,ename,hiredate,comm_before from emp join dept on emp.deptno= dept.deptno where empno = &i;
  select months_between(sysdate,hiredate) into t from emp where empno = &i;
  if t>=120 then
     update emp set comm=comm+10000 where empno=i;
  elsif t>=60 and t<120 then
     update emp set comm=comm+5000 where empno=i;
  elsif t<60 then
     update emp set comm=comm where empno=i;
  end if;
  select comm into comm_after from emp where empno=i;  
  dbms_output.put_line(empno||' '||ename||' '||hiredate||' '||comm_before||' '||comm_after);
end;
/

3、对每位员工的薪水进行判断,如果该员工薪水高于其所在部门薪水,则将其薪水减50元,否则不变

declare 
  -- Local variables here
  myempno emp.empno%type := '&no';
  empeg scott.emp%rowtype;
  avgSal number;
  saleg number;
  depteg scott.dept%rowtype;
begin
  -- Test statements here
  select * into empeg from scott.emp where emp.empno = myempno;
  select * into depteg from scott.dept where dept.deptno=empeg.deptno;
  select avg(sal) into avgSal from scott.emp group by emp.deptno having emp.deptno=empeg.deptno;
  select emp.sal into saleg from emp where emp.empno = myempno;
  if empeg.sal>avgSal then
    saleg := saleg-50;
  end if;
  dbms_output.put_line('员工编号:' || myempno || '姓名:' || empeg.ename || '之前工资:' || empeg.sal || '现在工资:' || saleg);
end;
/

4、创建一个存储过程,实现:通过输入员工编号查看员工姓名、工资、奖金;
1.1 如果输入的编号不存在,则进行异常处理;
1.2 如果工资高于4000,输出工资高于4000;
1.3 如果奖金没有或为0,进行异常提示处理

create or replace procedure procemp(myempno in int) is
  -- Local variables here
  empeg scott.emp%rowtype;
  ifExist number;
begin
  -- Test statements here
  select * into empeg from scott.emp where emp.empno = myempno;
  select count(1) into ifExist from scott.emp where emp.empno = myempno;
  if ifExist=0 then
     dbms_output.put_line('错误!编号不存在');
  elsif empeg.sal>4000 then
     dbms_output.put_line('工资高于4000');
  elsif nvl(empeg.comm,0)=0 then
     dbms_output.put_line('奖金为0');
  else null;
  end if;
    dbms_output.put_line('员工编号:' || myempno || ' 姓名:' || empeg.ename || ' 工资:' || empeg.sal || ' 奖金:' || empeg.comm);
end procemp;

相关文章

  • PL/SQL块练习

    1、自动以输入任意员工编号,输出该员工编号,输出该员工变号、姓名、工资、部门、所在地 2、自定义输入任意员工编号;...

  • PL/SQL块

    1.简介 Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询与Or...

  • 20、PL/SQL 块

    PL/SQL 块 是在 SQL 语言之上发展起来的一种应用,可以集中的处理各种复杂的 SQL 操作。组成: DEC...

  • PL/SQL程序块

    最近接触到oracle的pl/sql程序块的书写,对pl/sql的语法做一些总结。它是可扩展性的SQL语言,将变量...

  • 子程序的开发:函数

    子程序是指被命名的PL/SQL块,这种块可以携带参数,可以在不同程序中多次调用,PL/SQL有两种类型的子程序:函...

  • PL/SQL

    1.什么是PL/SQL PL/SQL(Procedure Language/SQL)PL/SQL是Oracle对s...

  • PLSQL(一)

    PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块。每块由三个子部分组成: 例子: ...

  • 四、PL/SQL语言

    PL/SQL是一种块结构的语言,这意味着PL/SQL程序被划分和编写代码的逻辑块。每块由三个子部分组成 4.1语法...

  • JAVA学习笔记(PL/SQL)

    1.1什么是PL/SQL PL/SQL(ProceduralLanguage/SQL)是Oracle在标准SQL的...

  • oracle工具PL/SQL快速入门1简介

    什么是PL/SQL? PL/SQL是Oracle中使用的结构化查询语言(SQL)的扩展。 与SQL不同,PL/SQ...

网友评论

      本文标题:PL/SQL块练习

      本文链接:https://www.haomeiwen.com/subject/ttllmxtx.html