IF 判断条件 THEN 满足条件时执行语句 END IF;

DECLARE

v_countResult NUMBER;

BEGIN

SELECT COUNT(empno) INTO v_countResult FROM emp;

IF v_countResult>10 THEN

DBMS_OUTPUT.put_line(v_countResult);

END if;

END;

/

IF 判断条件 THEN 满足条件时执行语句 ELSE 不满足条件时执行的语句 END IF;

DECLARE

v_countResult NUMBER;

BEGIN

SELECT COUNT(deptno) INTO v_countResult FROM dept;

IF v_countResult>10 THEN

DBMS_OUTPUT.put_line('DEPT>10');

ELSE

DBMS_OUTPUT.put_line('DEPT<10');

END IF;

END;

/

IF 判断条件1 THEN 满足条件1时执行的语句 ELSE IF 满足条件2时执行的语句ELSE所有条件都不满足时执行的语句 END IF;

DECLARE

v_countResult NUMBER;

BEGIN

SELECT COUNT(deptno) INTO v_countResult FROM dept;

IF v_countResult>10 THEN

DBMS_OUTPUT.put_line('DEPT>10');

ELSIF v_countResult<10 THEN

DBMS_OUTPUT.put_line('DEPT<10');

ELSE

DBMS_OUTPUT.put_line('DEPT=10');

END IF;

END;

/

查询EMP表的工资,输入员工编号,根据编号查询工资,如果工资高于3000元,则显示高工资,如果工资大于2000元,则显示中等工资,如果工资小于2000元,则显示低工资。

DECLARE

v_eno NUMBER;

v_sal NUMBER;

v_ename emp.ename%TYPE;

BEGIN

v_eno:=&empno;

SELECT ENAME,SAL INTO v_ename,v_sal from emp where empno=v_eno;

IF v_sal >3000 THEN

DBMS_OUTPUT.put_line(v_ename||' High salary');

ELSIF v_sal>2000 THEN

DBMS_OUTPUT.put_line(v_ename||' medium salary');

ELSE

DBMS_OUTPUT.put_line(v_ename||' low salary');

END IF;

END;

/

查询员工年薪

DECLARE

v_eno NUMBER;

v_sal emp.sal%TYPE;

v_ename emp.ename%TYPE;

BEGIN

v_eno:=&empno;

SELECT ENAME,SAL INTO v_ename,v_sal from emp where empno=v_eno;

DBMS_OUTPUT.put_line(v_ename||'''s annual salary is '||12*v_sal);

END;

/

用户输入一个雇员编号,根据它所在的部门给上涨工资,规则:10部门上涨10%,20上涨20%,30上涨30%,但是要求最高不能超过5000,超过5000就停留在5000.

我的写法

DECLARE

v_eno emp.empno%TYPE;

v_ename emp.ename%TYPE;

v_sal emp.sal%TYPE;

v_deptno emp.deptno%TYPE;

BEGIN

v_eno:=&empno;

SELECT DEPTNO,ENAME,SAL INTO v_deptno,v_ename,v_sal FROM EMP WHERE EMPNO=v_eno;

IF v_deptno=10 and 1.1*v_sal<5000 THEN

DBMS_OUTPUT.put_line(v_ename||','||1.1*v_sal);

ELSIF v_deptno=20 and 1.2*v_sal<5000 THEN

DBMS_OUTPUT.put_line(v_ename||','||1.2*v_sal);

ELSIF v_deptno=30 and 1.3*v_sal<5000 THEN

DBMS_OUTPUT.put_line(v_ename||','||1.3*v_sal);

ELSE

DBMS_OUTPUT.put_line(v_ename||'5000');

END IF;

END;

写法2:

Declare

v_empsal emp.sal%TYPE;

v_dno emp.deptno%TYPE;

v_eno emp.empno%TYPE;

BEGIN

v_eno:=&empno;

Select deptno,sal into v_dno,v_empsal from emp where empno=v_eno;

If v_dno=10 then

If v_empsal*1.1>5000 then

Update emp set sal=5000 where empno=v_eno;

Else

Update emp set sal=sal*1.1 where empno=v_eno;

End if;

elsIf v_dno=20 then

If v_empsal*1.2>5000 then

Update emp set sal=5000 where empno=v_eno;

Else

Update emp set sal=sal*1.2 where empno=v_eno;

End if;

elsIf v_dno=30 then

If v_empsal*1.3>5000 then

Update emp set sal=5000 where empno=v_eno;

Else

Update emp set sal=sal*1.3 where empno=v_eno;

End if;

Else

Null;

End if;

End;

/

使用CASE进行多条件判断

declare

v_sal emp.sal%TYPE;

v_job emp.job%TYPE;

v_eno emp.empno%TYPE;

BEGIN

v_eno:=&empno;

SELECT SAL,JOB INTO v_sal,v_job from emp where empno=v_eno;

case

when v_job='CLERK' then

dbms_output.put_line(v_job||','||1.05*v_sal);

when v_job='SALESMAN' then

dbms_output.put_line(v_job||','||1.08*v_sal);

when v_job='MANAGER' then

dbms_output.put_line(v_job||','||1.10*v_sal);

when v_job='ANALYST' then

dbms_output.put_line(v_job||','||1.20*v_sal);

when v_job='PRESIDENT' then

dbms_output.put_line(v_job||','||v_sal);

else

null;

end case;

end;

/

PL/SQL常用表达式及举例(一)的更多相关文章

  1. PL/SQL常用表达式及举例(二)

    使用LOOP循环 declare v_i number:=1; begin loop dbms_output.put_line('v_i='||v_i); exit when v_i>=3; v ...

  2. PL/SQL常用语法及举例

    PLSQL语句 DECLARE 声明部分 BEGIN 程序编写,SQL语句 EXECPTION 处理异常 END; / 声明部分(DECLARE) SQL> set serveroutput o ...

  3. PL/SQL常用设置 可看引用位置更清晰直观 引自:http://blog.csdn.net/xiaoqforever/article/details/27695569

    引自:http://blog.csdn.net/xiaoqforever/article/details/27695569 1,登录后默认自动选中My Objects 默认情况下,PLSQL Deve ...

  4. oracle入门(6)——PL/SQL常用语法

    [本文介绍] 本文不是”语法大全“,只是记录下作项目里自己常用的一些语法.方便查询. [语法] [输出]   (1)输出语法 DBMS_OUTPUT.PUT_LINE( ) [定义]   (1)定义变 ...

  5. PL/SQL常用设置

    tools-->preferences-->user interface-->editor-->AutoReplace AutoReplaceWhen enabled, you ...

  6. PL/SQL设置快捷键

    PL/SQL常用的快捷方式: sf= select * from sr=select t.*,t.rowid from t sd = select distinct * from d=delete f ...

  7. Oracle 11g系列:SQL Plus与PL/SQL

    SQL Plus是Oracle提供的一种用户接口,是数据库与用户之间进行交互的工具. PL/SQL是Oracle的过程化编程语言. 1.登录SQL Plus 利用Windows的[开始]|[运行]命令 ...

  8. PL/SQL块与表达式

    一.块(Block) 是PL/SQL的基本执行单元,由定义部分,执行部分(必须)和例外处理部分组成. Declare /*定义部分――定义常量.变量.游标.例外.复杂数据类型*/ Begin /*执行 ...

  9. 常用的PL/SQL开发原则

    (1)广泛使用绑定变量,特别是批量绑定,因为这可以有效的避免sql的硬解析和PL/SQL引擎和SQL引擎的上下文切换!(2)广泛使用UROWID来处理DML语句(UROWID是ROWID扩展,ORAC ...

随机推荐

  1. CM和CDH的安装-准备工作

    估计要分开来两篇博客说明,因为截图较多. 1.三个节点cdh1(主节点),cdh2,cdh3 配置就用一张图来说明,因为资源有限 2.版本依赖说明: CDH-5.9.0-1.cdh5.9.0.p0.2 ...

  2. 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析

      0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4  更新时间:2017-09-13 程序源码下载:http://www ...

  3. java.lang.NumberFormatException: For input string: "${jdbc.maxActive}"

    一.问题 使用SpringMVC和MyBatis整合,将jdbc配置隔离出来的时候出现下面的错误,百度了很久没有找到解决方法,回家谷歌下,就找到解决方法了,不得不说谷歌就是强大,不废话,下面是具体的错 ...

  4. IOS设计模式第十篇之命令行设计模式

    命令行设计模式: 命令设计模式将一个请求或行动作封装为对象.这个封装请求比原始的请求要灵活并且可以在对象之前被传递,存储,动态修改或者放进队列里面.苹果 苹果公司实现这种模式使用Target-Acti ...

  5. Delphi 中DataSnap技术网摘

    Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7 ...

  6. Eclipse安装php插件phpeclipse(转)

    1.PHPEclipse是Eclipse的一个用于开发PHP的插件.官网下载地址:http://sourceforge.net/projects/phpeclipse/下载解压后,将features和 ...

  7. css3整理--border-image

    border-image语法: border-image : none | <image> [ <number> | <percentage>]{1,4} [ / ...

  8. jvisualvm连接远程应用终于成功,附踩大坑记录!!(二:jmx方式)

    一.问题概述 参考前一篇: jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式) 这篇主要讲讲jmx方式. 二.启动前设置jmx参数 我这边拿tomcat举例,其余java ...

  9. jpa中时间戳格式应该用哪种类型

    遇到个bug,数据库时间存储用了datetime,但是下面的java jpa代码,查询回来,却只有日期. String innerSql = getInnerQuery(departmentId, k ...

  10. ELK系列一:ELK的安装

    一.Elasticsearch.Kibana.Logstash.Elasticsearch-head的安装 ELK的安装 安装下载地址: https://www.elastic.co/cn/downl ...