博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle 中使用 pl/sql代码块
阅读量:4958 次
发布时间:2019-06-12

本文共 4631 字,大约阅读时间需要 15 分钟。

1、写匿名块,输入三角形三个表的长度。在控制台打印三角形的面积。

declare          -- (p=(a+b+c)/2)          --声明三角形的面积 三条边 的           v_a number (10,2):=&no1;         v_b number (10,2):=&no2;         v_c number (10,2):=&no3;        v_p number (10,2);    begin          v_p:=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_p);     end;

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

declare--声明部门编号    type emp_record_type is record(             dname dept.dname%type,             empno emp.empno%type,             sal emp.sal%type);        v_emp emp_record_type;        v_depton emp.deptno%type;        v_avg emp.sal%type;        v_count number(8,2);    begin       --查询这个部门的总人数 计算出 这个部门的平均工资    平均工资是(基本工资+奖金)            select dname,count(*),avg(sal+nvl(comm,0))into v_emp from emp e inner join dept d on e.deptno=d.deptno where e.deptno=&no group         by e.deptno,dname;              --打印输出        dbms_output.put_line('部门名称:'||v_emp.dname||',平均工资'||v_emp.sal||'总数'||v_emp.empno);        end;

3、编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号

declare --定义记录类型    type emp_record_type is record(       ename emp.ename%type,        empno emp.empno%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;--定义循环变量v_num number(8);begin  select count(empno) into v_num from emp;  for i in 1 .. v_num  loop    select ename,empno,sal,deptno into v_emp(i) from (select e.*,rownum r from emp e where rownum<=14) where r=i;  end loop;      for i in 1 .. v_num  loop    dbms_output.put_line('员工姓名:'||v_emp(i).ename||',员工号:'||v_emp(i).empno||',工资:'||v_emp(i).sal||'部门号:'||v_emp(i).deptno);  end loop;end;

 

 4,编写一个PL/SQL块,输出所有比本部门平均工资高的员工信息。

declarev_sal emp.sal%type;--在控制台输入部门编号v_deptno emp.deptno%type :=&no;--查询所有比本部门平均工资高的员工信息cursor query_info is select e.empno, e.ename,e.sal,e.deptnofrom emp e where sal>(select  avg(sal+nvl(comm,0)) from emp where deptno=v_deptno);sal emp.sal%TYPE;empno dbms_sql.Number_Table;ename dbms_sql.Varchar2_Table;deptno dbms_sql.Number_Table;begin  --遍历打印for v_count in query_info loopdbms_output.put_line('员工编号'||v_count.empno ||'员工姓名 '||v_count.ename ||' 基本工资'||v_count.sal ||'部门编号 '||v_count.deptno);end loop ;end;

5、编写一个PL/SQL块,输出所有员工及其部门领导的姓名、员工号及部门号。

declarev_emp  emp%rowtype;cursor a is select a.empno,a.ename,a.deptno,m.ename mname from emp a inner join emp m on a.empno=m.mgr; begin  for v_emp in a    loop      dbms_output.put_line('员工编号:'||v_emp.empno||'员工姓名:'||v_emp.ename||'部门编号:'||v_emp.deptno||' 领导姓名 '||v_emp.mname);      end loop;  end;

6,查询姓为“SMITH”的员工信息,并输出其员工号、姓名、工资、部门号。如果该员工不存在,则插入一条新记录,员工号为2012,员工姓名为“Smith”,工资为7500元,入职日期为“2002年3月5日”,部门号为50。如果存在多个名“Smith”的员工,则输出所有名为“Smith”的员工号、姓名、工资、入职日期、部门号L。

declarev_emp emp%rowtype;begin  select * into v_emp from emp where ename='Smith';  dbms_output.put_line('工号:'||v_emp.empno||',姓名:'||v_emp.ename||',工资:'||v_emp.sal||',部门号:'||v_emp.deptno);      exception  when no_data_found then  insert into emp(empno,ename,sal,deptno) values(2016,'Smith',7500,50);   commit;  when too_many_rows then      for v_emp in (select * from emp where ename='Smith') loop      dbms_output.put_line('工号:'||v_emp.empno||',姓名:'||v_emp.ename||',工资:'||v_emp.sal||',部门号:'||v_emp.deptno);      end loop;   end;

7、输入员工编号,根据员工的入职时间修改发放奖金类,大于等于6年的奖金为2000,小于6年的奖金是1500

 

begin  select hiredate into v_hiredate from emp where empno=&no1;  if(sysdate-v_hiredate)>365*6 then    v_comm:=2000;    else    v_comm:=1500;  end if;  update emp set comm=v_comm where empno=&no;  if(sql%rowcount>0)then  dbms_output.put_line('修改成功');  else  dbms_output.put_line('修改失败');  end if;end;

 8.计算一百以内的素数

declarefig boolean;begin  --循环100以内的数  for i in 2..100    loop--  判断是否是素数,条件满足  fig:=true;  for j in 2..trunc(i/2)    loop          if(mod(i,j)=0)then    fig:=false;    exit;    end if;      end loop;  --最后输出判断,如果fig为true。则该自然数是素数,则输出  if fig then    dbms_output.put_line(i);    end if;      end loop;end;

9、输出100以内的自然数

--使用loop循环输出一百以内的自然数declarev_i number(8):=1;begin  loop    dbms_output.put_line(v_i);    if v_i>=100 then      exit;         end if;    v_i:=v_i+1;    end loop;end;--使用while循环输出一百以内的自然数declareV_i number(8):=1;begin  while v_i<=100  loop    dbms_output.put_line(v_i);    v_i:=v_i+1;  end loop;end;declare--使用for循环输出一百以内的自然数begin for v_i in 1..100   loop     dbms_output.put_line(v_i);   end loop;end;declarev_emp emp_table%type;beginselect * bulk collect into v_emp from emp;for v_i in v_emp.first .. v_enmp.lastloop  dbms_output.put_line('员工编号'||v_emp(v_i),empno);end loop;  end;

 

转载于:https://www.cnblogs.com/hph1728390/p/10828613.html

你可能感兴趣的文章
QTP 捕获对象模式切换
查看>>
poi操作Excel相关对象属性介绍及中级应用
查看>>
mysql数据类型
查看>>
1.MyBaits无代理全套增删改
查看>>
spring(二)
查看>>
Oracle的汉字转拼音首字母的函数
查看>>
排序算法
查看>>
GAN生成图像论文总结
查看>>
(转)让ubuntu9.10开机自动挂载NTFS分区
查看>>
presentModalViewController 的动画效果
查看>>
windows mobile 程序控件置顶
查看>>
ORA-02447: cannot defer a constraint that is not deferrable
查看>>
EditPlus注册码
查看>>
servlet+jsp+java实现Web应用
查看>>
乔坟往事-目录
查看>>
MAMP添加mysql的环境变量
查看>>
css3实现漂亮的倒影效果
查看>>
c# int类型的转datetime类型
查看>>
简单工厂模式
查看>>
全球手机芯片产业格局
查看>>