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

declare

      v_side_first number(20):=&第一条边;
v_side_second number(20):=&第二条边;
v_side_third number(20):=&第三条边; v_p number(30);
v_s number(30);
begin
v_p:=(v_side_first+v_side_second+v_side_third)/2;
v_s:=sqrt(v_p*(v_p-v_side_first)*(v_p-v_side_second)*(v_p-v_side_third));
dbms_output.put_line('三角形面积为:'||v_s);
end;

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

      declare
-- 声明record类型对象
type emp_record_type is record (
-- 声明record类型中的变量
v_dname dept.dname%type,
v_count emp.empno%type,
v_avgesal emp.sal%type
); v_emp emp_record_type; begin
-- 查询所有需要的数据 赋值给变量
select d.dname,count(e.ename),avg(sal+nvl(comm,0)) into v_emp from emp e inner join dept d on e.deptno=d.deptno where d.deptno=&no group by d.dname;
    -- 打印输出结果
dbms_output.put_line('部门名称:'||v_emp.v_dname||'总人数:'||v_emp.v_count||'平均工资:'||v_emp.v_avgesal); end;

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

   declare
cursor c is select empno,ename,sal,deptno from emp;
begin
for v_emp in c
loop
dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||',部门编号:'||v_emp.deptno);
end loop;
end;

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

declare
v_emp emp%rowtype; cursor c is select * from emp e1 where sal>(select avg(sal) from emp e2 where e1.deptno=e2.deptno); begin for v_emp in c
loop
dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename||',员工职位:'||v_emp.job||',员工上级:'||v_emp.mgr||'雇佣日期:'||v_emp.hiredate||',基本工资:'||v_emp.sal||',奖金:'||v_emp.comm||',部门编号:'||v_emp.deptno);
end loop; end;

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

declare
-- 声明record类型
type emp_record_type is record(
-- 声明record类型中的变量
ename emp.ename%type,
mname emp.ename%type,
empno emp.empno%type,
deptno emp.deptno%type );
-- 声明table类型
type emp_table_type is table of emp_record_type
-- 指定下标的增长方式为整数 每次增长1
index by binary_integer;
-- 声明table类型的变量
v_emp emp_table_type; begin
-- 查询所有需要的数据 赋值给变量
select ename,nvl((select e2.ename from emp e2 where e1.mgr=e2.empno),'无'),empno,deptno bulk collect into v_emp from emp e1;
-- 循环 输出结果
for i in 1..v_emp.count
loop
dbms_output.put_line('员工姓名:'||v_emp(i).ename||',领导姓名:'||v_emp(i).mname||',员工编号:'||v_emp(i).empno||',部门编号:'||v_emp(i).deptno);
end loop;
end;

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

declare
v_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,hiredate,deptno) values (2012,'SMITH',7500,'5-3月-2001',50);
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.hiredate||',部门编号:'||v_emp.deptno);
end loop;
end;

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

declare
-- 声明变量
v_empno emp.empno%type:=&no;
v_hiredate emp.hiredate%type;
begin
-- 根据输入员工编号,查询入职日期
select hiredate into v_hiredate from emp where empno=&no;
-- 判断员工的工作时间,大于等于6年,奖金为2000
if (sysdate-v_hiredate)/365>=6 then
update emp set comm=nvl(comm,0)+2000; else -- 反之,奖金为1500
update emp set comm=nvl(comm,0)+1500;
end if;
end;

8、分别用loop ,while,for循环在控制台输出1到100的自然数

-- loop 循环
declare
-- 声明循环变量
v_i number(10):=1;
begin
loop
-- 判断循环条件, 条件成立,跳出循环
if v_i>100 then
exit;
end if;
-- 输出1到100的自然数
dbms_output.put_line(v_i);
-- 改变循环变量的值
v_i:=v_i+1;
end loop;
end;
==============================================
-- while 循环
declare
--声明循环变量
v_i number(10):=1;
begin
-- 判断循环条件,条件成立,执行循环
while v_i<=100
-- while循环 输出打印1到100的自然数
loop
dbms_output.put_line(v_i);
-- 改变循环变量的值
v_i:=v_i+1;
end loop; end;
=============================================== -- for 不用循环判断,不用改变循环变量的值
declare begin
-- 不用声明循环变量
for v_i in 1..100
loop
-- 输出打印1到100的自然数
dbms_output.put_line(v_i);
end loop; end;

9、在控制台输出1到100以内的素数

declare
v_no number := 0; --标记是第几个素数
v_number number; --表示1-100之间的数
v_num number;
begin
for v_number in 1 .. 100 loop
--如果整除,那就不是素数,除数+1,;
--如果不能整除,那么被除数就+1,继续执行除运算
v_num := ceil(v_number / 2);
for i in 2 .. v_num loop
if mod(v_number, i) = 0 then
exit;
elsif i > v_num - 1 then
v_no := v_no + 1;
dbms_output.put_line('第' || v_no || '个素数是:' || v_number);
end if;
end loop;
end loop;
end;

Oracle中PL/SQL 范例的更多相关文章

  1. Oracle中PL/SQL的执行部分和各种流程控制

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

  2. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  3. Oracle中PL/SQL的循环语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  4. oracle中pl/sql 练习题----输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

    一. 思路:声明record类型的变量,根据 多表联合查询查出想要的数据,最后输出. 二.注意:record类型不一定只是一个表中的数据,也可以声明不同表中的数据类型. 三.语句如下: declare ...

  5. oracle中动态SQL详解

    部分内容参考网上资料 1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情 ...

  6. oracle中动态SQL使用详细介绍

    Oracle编译PL/SQL程序块分为两个种:通常静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式,需要了解的朋友可以参考下     1.静态SQLSQL与动态SQL Oracle编译PL ...

  7. (转)Oracle中动态SQL详解

    本文转载自:http://www.cnblogs.com/gaolonglong/archive/2011/05/31/2064790.html 1.静态SQLSQL与动态SQL Oracle编译PL ...

  8. [转载]Oracle中动态SQL详解

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一 ...

  9. Oracle中动态SQL详解(EXECUTE IMMEDIATE)

    Oracle中动态SQL详解(EXECUTE IMMEDIATE) 2017年05月02日 18:35:48 悠悠倾我心 阅读数:744 标签: oracle动态sqloracle 更多 个人分类:  ...

随机推荐

  1. 如何在微信中发送"相册"文件时有选择性地显示视频文件

    相信很多微信用户在使用微信给朋友,同事发送相册中的文件时,微信会显示你手机中的视频文件,这样很不方便. 如果要完全不显示视频文件: 随便在手机中建立一个文件夹,名字叫 ".nomedia&q ...

  2. octave-basic

    在coursera上斯坦福的machine learning,lecturer极力推荐开源的编程环境Octave入手,所以我也下载了来试一试吧== 参考链接:http://www.linuxdiyf. ...

  3. Linux异常体系之vector_stub宏解析

    ARM-Linux汇编的宏定义语法说明如下: 使用注意: 1.宏定义以.macro开始,以.endm结束 2.可带参数,参数可有默认值 3.直接使用参数的名字\arg vector_stub宏的功能: ...

  4. scanf(),gets(),getchar()

    scanf()与gets()区别: scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用gets() ...

  5. 2018 Multi-University Training Contest 10 CSGO(HDU - 6435)(最远曼哈顿距离)

    有 n 种主武器,m 种副武器.每种武器有一个基础分数k种属性值 X[i] . 选出一种主武器 mw 和一种副武器 sw,使得两种武器的分数和 + 每个属性的差值尽量大.(参考下面的式子) 多维的最远 ...

  6. InnoDB Redo Flush及脏页刷新机制深入分析

    概要: 我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页,这样就产生了脏页.既然有重做日志保证数据持久性,查询时也可以直接从缓 ...

  7. WPF触控程序开发(三)——类似IPhone相册的反弹效果

    用过IPhone的都知道,IPhone相册里,当图片放大到一定程度后,手指一放,会自动缩回,移动图片超出边框后手指一放,图片也会自动缩回,整个过程非常和谐.自然.精确,那么WPF能否做到呢,答案是肯定 ...

  8. HDU 3486 Interviewe RMQ

    题意: 将\(n\)个数分成\(m\)段相邻区间,每段区间的长度为\(\left \lfloor \frac{n}{m} \right \rfloor\),从每段区间选一个最大值,要让所有的最大值之和 ...

  9. Python虚拟机之while循环控制结构(三)

    Python虚拟机中的while循环控制结构 在Python虚拟机之if控制流(一)和Python虚拟机之for循环控制流(二)两个章节中,我们介绍了if和for两个控制结构在Python虚拟机中的实 ...

  10. Question | 移动端虚拟机注册等作弊行为的破解之道

    本文来自网易云社区 "Question"为网易云易盾的问答栏目,将会解答和呈现安全领域大家常见的问题和困惑.如果你有什么疑惑,也欢迎通过邮件(zhangyong02@corp.ne ...