--流程控制语句--条件表达式符号>、<、>、<=、>=、<>、!=IS NULL    / IS NOT NULLBETWEEN ... AND ...--条件连接符AND/OR
---------------------------------------------------------------------------------判断语句--IF语句--语法IF 条件表达式 THENPLSQL语句块;END IF;    --IF ELSE语句--语法IF 条件表达式 THENPLSQL语句块;ELSEPLSQL语句块;END IF;--IF ELSIF ELSE语句--语法IF 条件表达式1 THENPLSQL语句块1;ELSIF 条件表达式2 THENPLSQL语句块2;ELSIF 条件表达式3 THENPLSQL语句块3;...ELSEPLSQL语句块;END IF;             --示例1,IF练习题。如果员工的工资小于3000,则给该员工薪资加500
DECLARE V_EMPNO SCOTT.EMP2.EMPNO%TYPE:=7499;V_SAL SCOTT.EMP2.SAL%TYPE;
BEGIN SELECT SAL INTO V_SAL FROM EMP2 WHERE EMPNO=V_EMPNO;IF V_SAL<3000 THENUPDATE EMP2 SET SAL=SAL+500 WHERE EMPNO=V_EMPNO;END IF;
END;--示例2,IF ELSE练习题。比较M和N的大小,打印出更大的那个值
DECLAREV_N NUMBER(10):=333;V_M NUMBER(10):=100;
BEGINIF V_N>=V_M THENDBMS_OUTPUT.PUT_LINE(V_N);ELSEDBMS_OUTPUT.PUT_LINE(V_M);   END IF;
END;--示例3,IF ELSIF ELSE练习题。当成绩小于60时打印不及格,当成绩60-70时,打印及格,当成绩70-80,打印良好。当成绩80以上,打印优秀。
DECLAREV_SC NUMBER(4,1):=80;
BEGINIF V_SC<60 THENDBMS_OUTPUT.PUT_LINE('不及格');ELSIF V_SC<70 THENDBMS_OUTPUT.PUT_LINE('及格');ELSIF V_SC<80 THENDBMS_OUTPUT.PUT_LINE('良好');ELSEDBMS_OUTPUT.PUT_LINE('优秀');END IF;
END;
---------------------------------------------------------------------------------CASE语句--语法1CASEWHEN 条件表达式1 THENPLSQL语句块1;WHEN 条件表达式2 THENPLSQL语句块2;...ELSEPLSQL语句块;END CASE;--语法2CASE 表达式WHEN 值 THENPLSQL语句块1;WHEN 值 THENPLSQL语句块2;...ELSEPLSQL语句块;END CASE;--示例4,CASE WHEN练习题。当成绩小于60时打印不及格,当成绩60-70时,打印及格,当成绩70-80,打印良好。当成绩80以上,打印优秀。
DECLAREV_SC NUMBER(4,1):=70;
BEGINCASE WHEN V_SC<60 THENDBMS_OUTPUT.PUT_LINE('不及格');WHEN V_SC<70 THENDBMS_OUTPUT.PUT_LINE('及格');WHEN V_SC<80 THENDBMS_OUTPUT.PUT_LINE('良好');ELSEDBMS_OUTPUT.PUT_LINE('优秀');END CASE;
END;
---------------------------------------------------------------------------------循环语句--LOOP循环--语法LOOP循环体语句;退出循环体语句; --EXIT WHEN循环控制语句; --修改循环变量的值END LOOP;--注意:需要声明循环变量,有退出循环语句和循环控制语句,条件是退出循环条件--WHILE循环--语法WHILE 循环条件 LOOP循环体语句;循环控制语句;END LOOP;--FOR循环--语法FOR 循环变量 IN [REVERSE] 集合|游标|SELECT语句 LOOP循环体语句;END LOOP;--注意:FOR循环不需要声明循环变量,也不需要循环控制语句FOR循环后面是一个非数字集合时,循环变量默认是一个记录类型数字集合的表示:最小值..最大值      --循环涉及的关键字EXIT:退出循环CONTINUE:退出本次循环RETURN:结束程序--示例4,LOOP循环练习。循环打印1-10
DECLAREV_N NUMBER(10):=1;
BEGINLOOPDBMS_OUTPUT.PUT_LINE(V_N); --循环体语句EXIT WHEN V_N=10; --退出循环语句V_N:=V_N+1; --循环控制语句END LOOP;
END;--示例5,WHILE循环练习。循环打印1-10
DECLAREV_N NUMBER(10):=1;
BEGINWHILE V_N<=10 LOOPDBMS_OUTPUT.PUT_LINE(V_N); --循环体语句V_N:=V_N+1; --循环控制语句END LOOP;
END;--示例6,FOR循环练习。循环打印1-10
BEGINFOR V_N IN 1..10 LOOPDBMS_OUTPUT.PUT_LINE(V_N);END LOOP;
END;--示例7,FOR循环练习。查询10号部门的所有员工信息
BEGINFOR V_EMP IN (SELECT * FROM EMP2 WHERE DEPTNO=10) LOOP DBMS_OUTPUT.PUT_LINE(V_EMP.EMPNO||','||V_EMP.ENAME);END LOOP;
END;
---------------------------------------------------------------------------------流程控制语句练习题--判断语句练习题
--练习题1,打印如下图形,分析如下
--*******  1ROW 7'*' 0' '   (N-1) 7-2(N-1)
-- *****   2ROW 5'*' 1' '
--  ***    3ROW 3'*' 2' '
--   *     4ROW 1'*' 3' '
DECLAREV_R NUMBER(10):=11;
BEGINFOR V_N IN 1..(1+V_R)/2 LOOPFOR V_M IN 1..(V_N-1) LOOPDBMS_OUTPUT.PUT(' ');END LOOP;FOR V_M IN 1..V_R-2*(V_N-1) LOOPDBMS_OUTPUT.PUT('*');END LOOP;DBMS_OUTPUT.NEW_LINE();END LOOP;
END;--练习题2,打印九九乘法表
DECLAREV_RES NUMBER(10);
BEGINFOR V_N IN 1..9 LOOPFOR V_M IN 1..V_N LOOPV_RES:=V_M*V_N;DBMS_OUTPUT.PUT(V_M||'*'||V_N||'='||V_RES);IF V_RES<10 THENDBMS_OUTPUT.PUT('  ');ELSEDBMS_OUTPUT.PUT(' ');END IF;END LOOP;DBMS_OUTPUT.NEW_LINE();END LOOP;
END;--练习题3,给出三个数,并按从大到小依次打印
DECLAREV_N NUMBER(10):=66;   --77   100  100V_M NUMBER(10):=300;   --66   66   77V_K NUMBER(10):=100;  --100  77   66V_TMP NUMBER(10);
BEGINIF V_N<V_M THENV_TMP:=V_N;V_N:=V_M;V_M:=V_TMP;END IF;IF V_N<V_K THENV_TMP:=V_K;V_K:=V_N;V_N:=V_TMP;END IF;IF V_M<V_K THENV_TMP:=V_M;V_M:=V_K;V_K:=V_TMP;END IF;DBMS_OUTPUT.PUT_LINE(V_N||','||V_M||','||V_K);
END;--练习题4,判断一个年份是不是闰年,优先级:AND > OR
DECLAREV_YEAR NUMBER(4):=2021;
BEGINIF MOD(V_YEAR,400)=0 OR MOD(V_YEAR,4)=0 AND MOD(V_YEAR,100)<>0 THENDBMS_OUTPUT.PUT_LINE(V_YEAR||'是闰年');ELSEDBMS_OUTPUT.PUT_LINE(V_YEAR||'是平年');END IF;
END;--练习题5,判断一个数是奇数还是偶数
DECLAREV_N NUMBER(10):=16;
BEGINIF MOD(V_N,2)=0 THENDBMS_OUTPUT.PUT_LINE(V_N||'是偶数');ELSEDBMS_OUTPUT.PUT_LINE(V_N||'是奇数');END IF;
END;--练习题6,现要求输入体重和身高,求出体制指数所在范围
--体质指数(BMI)=体重(KG)/身高^2(M)
--偏瘦 <=18.4;
--正常 18.5-23.9
--过重 24.0-27.9
--肥胖 >=28
DECLAREV_H NUMBER(10,2):=1.72;V_W NUMBER(10,2):=90;V_BMI NUMBER(10,2);
BEGINV_BMI:=V_W/POWER(V_H,2);CASEWHEN V_BMI<=18.4 THENDBMS_OUTPUT.PUT_LINE('V_BMI:'||V_BMI||',偏瘦');WHEN V_BMI<=23.9 THENDBMS_OUTPUT.PUT_LINE('V_BMI:'||V_BMI||',正常');WHEN V_BMI<=27.9 THENDBMS_OUTPUT.PUT_LINE('V_BMI:'||V_BMI||',过重');ELSEDBMS_OUTPUT.PUT_LINE('V_BMI:'||V_BMI||',肥胖');END CASE;
END;--练习题7,两个数相除并显示结果,如果第二个数为0,显示除数不能为0
DECLAREV_N NUMBER(10):=38;V_M NUMBER(10):=10;
BEGINIF V_M<>0 THENDBMS_OUTPUT.PUT_LINE('V_N/V_M='||V_N/V_M);ELSEDBMS_OUTPUT.PUT_LINE('除数不能为0');END IF;
END;
---------------------------------------------------------------------------------循环语句练习题
--练习题1,从EMP2表中显示名为SMITH的雇员的薪水和职位
DECLAREBEGINFOR V_EMP IN (SELECT ENAME,SAL,JOB FROM EMP2 WHERE ENAME='SMITH') LOOP DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME||','||V_EMP.SAL||','||V_EMP.JOB);END LOOP;
END;--练习题2,根据雇员的职位,公司决定按下列结构给员工加薪
--CLERK 500
--SALESMAN 1000
--ANALYST 1500
--OTHERWISE 2000
DECLAREV_SAL SCOTT.EMP2.SAL%TYPE;
BEGINFOR V_EMP IN(SELECT EMPNO,JOB FROM EMP2) LOOPCASE V_EMP.JOBWHEN 'CLERK' THENV_SAL:=500;WHEN 'SALESMAN' THENV_SAL:=1000;WHEN 'ANALYST' THENV_SAL:=1500;ELSEV_SAL:=2000;           END CASE;UPDATE EMP2 SET SAL=SAL+V_SAL WHERE EMPNO=V_EMP.EMPNO;END LOOP;
END;--练习题3,计算S=1*2+2*3+...+N*(N+1),当N=50的值
DECLAREV_N NUMBER(10):=50;V_SUM NUMBER(10):=0;
BEGINFOR V_M IN 1..V_N LOOPV_SUM:=V_SUM+V_M*(V_M+1);END LOOP;DBMS_OUTPUT.PUT_LINE('V_SUM='||V_SUM);
END;--练习题4,计算下面级数当末项小于0.001时的部分和
--1/(1*2)+1/(2*3)+1/(3*4)+...+1/(N*(N+1))
DECLAREV_N NUMBER(10):=100; --声明循环变量NV_I NUMBER(10,9); --声明一个变量保存每一项的值V_SUM NUMBER(10,9):=0; --声明一个变量保存表达式的和
BEGINFOR V_M IN 1..V_N LOOPV_I:=1/(V_M*(V_M+1));V_SUM:=V_SUM+V_I;IF V_I<0.001 THENDBMS_OUTPUT.PUT_LINE('V_M='||V_M);EXIT;END IF;END LOOP;DBMS_OUTPUT.PUT_LINE('V_SUM='||TO_CHAR(V_SUM));
END;--练习题5,计算SUM=1!+2!+3!+...+N!
DECLAREV_N NUMBER(10):=5;V_TMP NUMBER(10):=1;V_SUM NUMBER(10):=0;
BEGINFOR V_M IN 1..V_N LOOPV_TMP:=V_TMP*V_M;V_SUM:=V_SUM+V_TMP;END LOOP;DBMS_OUTPUT.PUT_LINE('V_SUM='||V_SUM);
END;--练习题6,编程满足不等式 1^2+3^2+5^2+...+N^2>2000的最小N值
DECLAREV_SUM NUMBER(20):=0;V_N NUMBER(20):=1;
BEGINWHILE 1=1 LOOPV_SUM:=V_SUM+POWER(V_N,2);IF V_SUM>2000 THENEXIT;END IF;V_N:=2*V_N+1;END LOOP;DBMS_OUTPUT.PUT_LINE(V_N);
END;DECLAREV_SUM NUMBER(20):=0;V_N NUMBER(20):=1;
BEGINLOOPV_SUM:=V_SUM+POWER(V_N,2);EXIT WHEN V_SUM>2000;V_N:=2*V_N+1;END LOOP;DBMS_OUTPUT.PUT_LINE(V_N);
END;--练习题7,将员工表中所有工资小于3000增加400,统计出增加工资的人数和增加工资的数量
--方法一
DECLAREV_COUNT NUMBER(10);
BEGINSELECT COUNT(*) INTO V_COUNT FROM EMP2 WHERE SAL<3000;UPDATE EMP2 SET SAL=SAL+400 WHERE SAL<3000;DBMS_OUTPUT.PUT_LINE('人数='||V_COUNT||',总工资='||(V_COUNT*400));
END;--方法二
DECLAREV_COUNT NUMBER(10);
BEGINUPDATE EMP2 SET SAL=SAL+400 WHERE SAL<3000;V_COUNT:=SQL%ROWCOUNT;DBMS_OUTPUT.PUT_LINE('人数='||V_COUNT||',总工资='||(V_COUNT*400));
END;--练习题8,从员工表中显示工资最高的前五个人的姓名、部门编号和工资
BEGINFOR V_EMP IN (SELECT * FROM (SELECT ENAME,DEPTNO,SAL FROM EMP2 ORDER BY SAL DESC) WHERE ROWNUM<=5) LOOPDBMS_OUTPUT.PUT_LINE(V_EMP.ENAME||','||V_EMP.SAL||','||V_EMP.DEPTNO);END LOOP;
END;

PL/SQL编程---流程控制语句相关推荐

  1. Oracle PL/SQL编程详解

    Oracle PL/SQL编程详解 - 古立 - 博客园 <我的网络摘抄本> 网摘/转载/备忘/随记 博客园 首页 新随笔 联系 管理 订阅 随笔- 84  文章- 0  评论- 0  & ...

  2. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)...

    [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) --通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE P ...

  3. Oracle 实验六:PL/SQL编程基础(1)

    实验六:PL/SQL编程基础(1) 一.实验目的 1.熟悉掌握PL/SQL编程中的变量定义语句 2.熟悉掌握PL/SQL编程中的条件语句和循环语句等流程控制语句. 3.能熟练使用上述基本语句编写PL/ ...

  4. ORACLE PL/SQL编程

    PL/SQL程序设计 什么是PL/SQL PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言存储过 ...

  5. 实验六:PL/SQL编程基础(1)

    一.实验目的 1.熟悉掌握PL/SQL编程中的变量定义语句 2.熟悉掌握PL/SQL编程中的条件语句和循环语句等流程控制语句. 3.能熟练使用上述基本语句编写PL/SQL代码完成指定的数据处理功能. ...

  6. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  7. oracle pl/sql编程详细,Oracle框架:PL/SQL编程:

    PL/SQL编程 一:什么是PL/SQL (1.)PL/SQL体系结构: PL/SQL引擎用来编译和执行,PL/SQL块或子程序,该引擎驻留在Oracle服务器中. (2.)PL/SQL块简介 PL/ ...

  8. 10、oracle下PL/SQL编程基础

    ORACLE下的PL/SQL编程基础 PL/SQL语言是程序化程序设计语言,块是PL/SQL编程中的基本结构,其优点在于支持SQL.支持面向对象编程.性能好.可移植性.与sql集成.安全性高等. 1. ...

  9. PL/SQL编程基本概念

    /* =============================================================================pl/sql编程 =========== ...

最新文章

  1. BERT不加载预训练模型的理由
  2. poj 2482 Stars in Your Window(线段树+离散化+线扫描)
  3. myeclipse导入maven工程
  4. 前端学习(2349):tabber的其他属性
  5. vim win装_vim插件管理器的安装和配置-windows
  6. 实现WebSocket和WAMP协议的开源库WampSharp
  7. 电子或者自动化同学以后做什么
  8. 【Axure原型分享】短视频APP原型模板
  9. sketchup 图片转模型_3d模型转su模型(如何将3D模型转化为sketchup)
  10. SpringBoot 错误:Field userService in com.lyh.Controller.UserController required a bean of...
  11. c语言alpha通道的用法,alpha通道最主要的用途是什么
  12. [线性代数]n维向量(秦静老师主讲)
  13. 监控摄像头RTSP低延时无插件直播解决方案
  14. 抵抗不了“刷礼物”的诱惑,下架的斗鱼要上市有点难
  15. ERROR dispatch for GET /error?thingName=lxyrequestId=123, parameters={masked}
  16. ICLR2023推荐系统投稿论文集锦
  17. Excel建立股票资产定价模型,寻找最佳投资组合
  18. Oracle时间与Unix时间戳的转换
  19. 运营︱如何有效推广海外社交app
  20. Android反编译教程

热门文章

  1. 电脑设备中PCI简易通讯控制器驱动显示黄色感叹号图标怎么办【申明:来源于网络】
  2. everything使用经验总结——待续
  3. win10恢复经典开始菜单_怎么将win10界面切换成win7界面
  4. TCP/IP编程之getsockopt/setsockopt函数详解
  5. 小米4c原版android哪个好,小米4c和小米4哪个好
  6. 小米手机4c如何刷入开发版获取ROOT权限
  7. IPFS(中文白皮书)
  8. 警方停止搜救卡迪夫城新援 英超宣布将为其默哀
  9. python情感词典计算得分_用python进行金融市场文本数据的情感计算!
  10. c语言用定时器按键发音,c语言中怎样设置计时器?