精华内容
下载资源
问答
  • 1.decode函数SELECT ID,NAME,DECODE(LEVER,1,'教授',2,'副教授',3,'导师','讲师') POSITION,(SELECT CLASSNUM FROM CLASS T WHERE T.NUM = S.NUM) NUM FROM ...上句sql中的decode函数的用法逻辑是这样理解的:IF(LE...

    1.decode函数

    SELECT ID,NAME,DECODE(LEVER,1,'教授',2,'副教授',3,'导师','讲师') POSITION,(SELECT CLASSNUM FROM CLASS T WHERE T.NUM = S.NUM) NUM FROM TEACHER S WHERE T.LEVER IN (1,3);

    上句sql中的decode函数的用法逻辑是这样理解的:

    IF(LEVER==1) THEN

    RETURN '教授'(翻译值1)

    ELSE IF(LEVER==2) THEN

    RETURN '副教授'(翻译值2)

    ELSE IF(LEVER==3) THEN

    RETURN '导师'

    ELSE

    RETURN '讲师'(默认值)

    其中,默认值可有可无

    2.NVL函数

    SELECT ID,PERSONNAME,NVL(BOOKNUM,0) AS BOOKNUM,NVL(PERSONNUM,0) AS PERSONNUM FROM BOOKSTORE

    上句sql的NVL()函数可以这样理解:

    IF (BOOKNUM !=NULL) THEN

    RETURN BOOKNUM

    ELSE

    RETURN 0

    3.NVL2函数

    SELECT ID,NVL2(BOOKNUM,BOOKNUM,NVL2(PERSONNUM,PERSONNUM,0) AS PERSONNUM FROM BOOKSTORE

    上句sql的NVL2()函数可以这样理解

    IF (BOOKNUM !=NULL) THEN

    RETURN BOOKNAME

    ELSE IF(BOOKNUM == NULL)

    RETURN 0

    值得注意的是,BOOKNAME和0类型不同的话,0会转换成BOOKNAME的类型,转换不了,则会报错

    4.NULLIF函数

    SELECT E.NAME,E.JOB_ID,J.JOB_ID,NULLIF(E.JOB_ID,J.JOB_ID) AS SAME FROM EMPLOYEES E,JOB_HISTORY J

    WHERE E.EMPLOYEE_ID = J.EMPLOYEE_ID ORDER BY NAME;

    上句sql的NULLIF()函数可以这样理解

    IF(E.JOB_ID == J.JOB_ID) THEN

    RETURN NULL

    ELSE

    RETURN E.JOB_ID

    5.SUM函数

    SELECT ID,CLASSNAME,SUM(NVL(RESULTS,0)) AS RESULTS,SUM(DECODE(TYPE,'50',1)) AS CLASSTYPE FROM CLASS

    上句sql的SUM()函数主要是用来求和括号里表达式返回的值,或表中某个字段的总和

    6.SUBSTR函数

    SELECT SUBSTR(CLASSNAME,0) AS CLASSNAME,SUBSTR("今天天气是晴天!",2) FROM CLASS;

    上句sql的SUBSTR()函数主要是用来截取字符串的一部分的,如SUBSTR(CLASSNAME,0)表示从第0个字节开始截取CLASSNAME字符串,SUBSTR("今天天气是晴天",2)表示从第三个字节开始截取"今天天气是晴天"中的两个字节,结果是"天气".

    7.TO_CHAR函数

    SELECT S.ID,S.NAME,TO_CHAR(S.TIME,'yyyy-mm-dd hh24:mi:ss'),TO_CHAR(S.MONEY,'999') AS MONEY

    FROM STUDENT S

    上句sql的SUBSTR()函数主要是将数值型或日期型字段转换成字符型,方便做类似模糊查询的操作

    展开全文
  • oracle条件分支用法 a.if...then b.if...then... else c.if...then... elsif.... else  实例 1 问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资...

    oracle条件分支用法


    a.if...then


    b.if...then... else


    c.if...then... elsif.... else 

    实例 1


    问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。 
    create or replace procedure sp_pro6(spName varchar2) is v_sal emp_copy.sal%type;

    begin

    select sal into v_sal from emp_copy where ename=spName;

    if v_sal<2000 then

    updateemp_copy set sal=sal*1.1 where ename=spName;

    end if;

    end;

    实例 2


    问题:编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加100;如果补助为0就把补助设为200

    create or replace procedure sp_pro6(spName varchar2) is

    v_comm emp_copy.comm%type;

    begin

    select comm into v_comm from emp_copy where ename=spName;

    if v_comm<>0 then

    updateemp_copy set comm=comm+100 where ename=spName;

    else

    updateemp_copy set comm=comm+200 where ename=spName;

    end if;

    end;

    实例 3

    多重条件分支 
    if  
    then  
    elsif – then.


    问题:编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT


    给他的工资增加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其它


    职位的雇员工资增加200


    create or replace procedure sp_pro6(spNo number) is

    v_job emp_copy.job%type;

    begin

    select job into v_job from emp_copy where empno=spNo;

    if v_job='PRESIDENT' 
    then

    updateemp_copy set sal=sal+1000 where empno=spNo;

    elsif v_job='MANAGER' 
    then

    updateemp_copy set sal=sal+500 where empno=spNo;

    else

    updateemp_copy set sal=sal+200 where empno=spNo;

    end if;

    end;

    展开全文
  • Oracle条件表达式用法

    千次阅读 2018-09-11 21:19:42
    Oracle条件表达式(if-else if-else)有两种表达方法: 1.–CASE 表达式:SQL99的语法,类似Basic,比较繁琐 2.–DECODE 函数:Oracle自己的语法,类似Java,比较简单 CASE的用法: 例如:oracle中 emp员工...

    Oracle中条件表达式(if-else if-else)有两种表达方法:

    1.–CASE 表达式:SQL99的语法,类似Basic,比较繁琐

    2.DECODE 函数:Oracle自己的语法,类似Java,比较简单

    CASE的用法:

    例如:oracle中 emp员工表:

    
    SQL> select ename,job,sal 涨前,
      2         case job when 'PRESIDENT' then sal+1000
      3                  when 'MANAGER' then sal+800
      4                  else sal+400
      5          end 涨后
      6  from emp;

    结果展示:

    ENAME      JOB             涨前       涨后                                                                                                                                                              
    ---------- --------- ---------- ----------                                                                                                                                                              
    SMITH      CLERK            800       1200                                                                                                                                                              
    ALLEN      SALESMAN        1600       2000                                                                                                                                                              
    WARD       SALESMAN        1250       1650                                                                                                                                                              
    JONES      MANAGER         2975       3775                                                                                                                                                              
    MARTIN     SALESMAN        1250       1650                                                                                                                                                              
    BLAKE      MANAGER         2850       3650                                                                                                                                                              
    CLARK      MANAGER         2450       3250                                                                                                                                                              
    SCOTT      ANALYST         3000       3400                                                                                                                                                              
    KING       PRESIDENT       5000       6000                                                                                                                                                              
    TURNER     SALESMAN        1500       1900                                                                                                                                                              
    ADAMS      CLERK           1100       1500                                                                                                                                                              
    
    ENAME      JOB             涨前       涨后                                                                                                                                                              
    ---------- --------- ---------- ----------                                                                                                                                                              
    JAMES      CLERK            950       1350                                                                                                                                                              
    FORD       ANALYST         3000       3400                                                                                                                                                              
    MILLER     CLERK           1300       1700                                                                                                                                                              
    
    已选择 14 行。

    DECODE用法:

    例如:依然使用oracle中表格的数据:

    SQL> select ename,job,sal 涨前,
      2         decode(job,'PRESIDENT',sal+1000,
      3                    'MANAGER',sal+800,
      4                              sal+400) 涨后
      5  from emp;

    结果展示:

    ENAME      JOB             涨前       涨后                                                                                                                                                              
    ---------- --------- ---------- ----------                                                                                                                                                              
    SMITH      CLERK            800       1200                                                                                                                                                              
    ALLEN      SALESMAN        1600       2000                                                                                                                                                              
    WARD       SALESMAN        1250       1650                                                                                                                                                              
    JONES      MANAGER         2975       3775                                                                                                                                                              
    MARTIN     SALESMAN        1250       1650                                                                                                                                                              
    BLAKE      MANAGER         2850       3650                                                                                                                                                              
    CLARK      MANAGER         2450       3250                                                                                                                                                              
    SCOTT      ANALYST         3000       3400                                                                                                                                                              
    KING       PRESIDENT       5000       6000                                                                                                                                                              
    TURNER     SALESMAN        1500       1900                                                                                                                                                              
    ADAMS      CLERK           1100       1500                                                                                                                                                              
    
    ENAME      JOB             涨前       涨后                                                                                                                                                              
    ---------- --------- ---------- ----------                                                                                                                                                              
    JAMES      CLERK            950       1350                                                                                                                                                              
    FORD       ANALYST         3000       3400                                                                                                                                                              
    MILLER     CLERK           1300       1700                                                                                                                                                              
    
    已选择 14 行。

     

    展开全文
  • OracleIF EXISTS用法

    千次阅读 2020-07-16 10:59:05
    Oracle中没有SQL中的if exists(...)的用法,所以可以用以下几种方法来替代 判断符合条件的个数是否为0 DECLARE cnt number; BEGIN SELECT COUNT(*) INTO cnt FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = '...

    在Oracle中没有SQL中的if exists(...)的用法,所以可以用以下几种方法来替代

    判断符合条件的个数是否为0

    DECLARE cnt number;
    
    BEGIN
    	SELECT COUNT(*) INTO cnt FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = '130201';
    	IF cnt = 0 THEN
    		DBMS_OUTPUT.PUT_LINE('无记录');
    	END IF;
    END;
    

    先定义一个变量,将所要查询的条件写成一个SELECT语句,将汇总结果付给该变量,通过该变量的值作为判断条件
    这种方法会直接统计数据表中所有的满足条件的记录总数,对于一些数据量庞大的表,在性能上会有非常严重的问题

    调用Oracle的EXISTS函数

    DECLARE cnt number;
    
    BEGIN
    	SELECT COUNT(*) INTO cnt FROM DUAL
    	WHERE EXISTS (
    		SELECT 1 FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = '130201'
    	);
    
    	IF cnt = 0 THEN
    		DBMS_OUTPUT.PUT_LINE('无记录');
    	END IF;
    END;
    

    通过在语句的外面套上一层dual,来使用oracle原有的exists语法
    虽然和第一种看起来类似,但分析执行计划可以知道,性能比以上两种都要好得多,与MSSQL的 if exists 最接近

    将判断条件封装为一个函数

    CREATE OR REPLACE FUNCTION EXISTS2 (IN_SQL IN VARCHAR2)
      RETURN NUMBER
    IS
      V_SQL VARCHAR2(4000);
      V_CNT NUMBER(1);
    BEGIN
      V_SQL := 'SELECT COUNT(*) FROM DUAL WHERE EXISTS (' || IN_SQL || ')';
      EXECUTE IMMEDIATE V_SQL INTO V_CNT;
      RETURN(V_CNT);
    END;
    

    需要使用的时候直接调用EXISTS2函数即可,例如

    BEGIN
    	IF EXISTS2 ('SELECT 1 FROM TEMP_ERROR_ITEM WHERE SER_PROVINCE_ID = ''130201''') = 1 THEN
    		DBMS_OUTPUT.PUT_LINE('存在记录');
    	END IF;
    END;
    

    转载:https://www.cnblogs.com/neru/archive/2012/06/23/2559551.html

    展开全文
  • ORACLE if、elsif用法

    2017-09-13 08:29:00
    IF (P_DW = 'aaa) THEN OPEN C FOR  ELSIF P_DW = 'bbb' THEN OPEN C FOR ELSIF P_DW = 'ccc' THEN OPEN C FOR ELSE OPEN C FOR END IF; END; 转载于:...
  • 关于条件判断的几个函数: 一、IF-ELSE 判断语句1.IF 语法 IF 表达式 THEN ... END IF; 输入账号名 kiki 以登陆账号 declare v_name varchar2(20):='&x'; begin if v_name='kiki' then dbms...
  • Oracle中关于条件判断的if else 用法

    千次阅读 2009-03-17 00:44:37
    这些日子经常接触oracle的存储过程,在里面有时要用到条件判断,if else 虽然简单,但是有些细节还是要注意的,下面就简要把其用法介绍一下: if ... then ... elsif ... then ...  else ... end if;  or if .....
  • Oracle中PL/SQL之IF条件判断语句的使用

    万次阅读 2018-07-17 14:27:06
    PL/SQL IF条件判断语句 1、IF 语法: IF 条件 THEN 语句; END IF; 例子:如果从控制台输入数字1则输出“我是数字1” --打开屏幕输出开关(默认没有打开的) set serveroutput on; --接受键盘输入,变量num:...
  • Oracle的case if else用法

    千次阅读 2018-09-22 09:42:30
    方法2:使用case语句 UPDATE USER_INFO SET GENDER= (  CASE GENDER  WHEN 1 THEN 2  WHEN 2 THEN 1  ELSE GENDER  END );   两者相比比,处理多的数据时是case语句效率更快,不容易出问题 ...
  • oracle if语句

    2009-05-07 14:25:19
    oracleif语句比较特殊,没有else if,而是使用elsif,使用方法如下: if ... then begin ... end; elsif ... then begin ... end; else begin ... end; end if;
  • oracle if 语句的使用

    千次阅读 2016-10-18 10:46:57
    IF语句的使用 A.基本的IF条件语句: 基本语法:  程序代码 IF THEN   END IF; Example:  程序代码 SQL> set serveroutput on; SQL> declare   x number(3):=9;  begin  if x ...
  • oracle if 和 case语句的使用

    千次阅读 2017-05-10 15:16:41
    oracle if语句和case语句的使用例子 --------------------if---------------------------- set serveroutput on  declare   v_n1 number(2):=-9; begin  if v_n1=0 then  dbms_output.put_line('这个值是0'...
  • Oracle中NVL2 和NULLIF用法 NULL指的是空值,或者非法值。 NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致 NVL2 (expr1, expr2, expr3) ->expr1不...
  • oracle 实现 if not exist 方法

    千次阅读 2010-01-11 15:08:54
    oracle 实现 if not exist 方法 见 http://www.itpub.net/thread-1135659-1-1.html 执行Oracle的insert或update语句时同时返回插入或更新后的字段值 http://pub.itpub.net/post/16888/94033 树的实现 ...
  • Oracle条件判断if...elsif

    2019-02-06 19:25:00
    转载于:https://www.cnblogs.com/niwotaxuexiba/p/10353964.html
  • 1 oracle存储过程中的if...elseif...else用法 [url]http://blog.csdn.net/pingkongyouyuan/archive/2009/11/02/4759131.aspx[/url] 2 恶心的Oracleif else if... [url]...
  • oracle if exists()

    千次阅读 2012-11-14 18:47:30
    对于Oracle中没有 if exists(...) 的语法,目前有许多种解决方法,这里先分析常用的三种,推荐使用最后一种 第一种是最常用的,判断count(*)的值是否为零,如下 declare  v_cnt number; begin  select ...
  • Oracle NULLIF函数的使用

    万次阅读 2018-07-19 15:42:38
    NULLIF语法  NULLIF(expr1,expr2),如果两个参数相等,返回null,否则返回第一个。第一个参数不可指定为空。... decode (条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)  NULLIF(param,0)等...
  • Oracle 中 decode 函数用法 含义解释: decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN  RETURN(翻译值1) ELSIF 条件=值2 THEN  RETURN(翻译值2)  … ELSIF ...
  • oracle if else elsif 使用例子

    万次阅读 2010-06-13 10:52:00
    if exp1 then begin ... end; elsif exp2 then begin ... end; else begin ... end; end if; --方式二 if exp then begin ... end; else begin ... end; end if; ...
  • DECODE用法:  DECODE(value,if1,then1,if2,then2,if3,then3,...,else)  含义为:  if 条件=值1 then  return(value 1)  else if 条件=值2 then  return(value 2)  ...
  • 本文给大家介绍了oracleif/else的三种实现方式及注意事项,非常不错,具有参考借鉴价值,需要的朋友参考下吧
  • ORACLE ELSE IF,ELSIF

    千次阅读 2012-02-22 12:19:34
    ELSE IF,ELSEIF都是错误的用法,正确的用法是ELSIF ELSE IF在编译器中之所以能正常显示,是因为编译器把他当做了 ----------------------------------------------------------------------- ELSE  IF ... ...
  • Oracle case when用法

    千次阅读 2014-01-16 14:44:58
    CASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。 注意点:  1、以CASE开头,以END结尾  2、分支中WHEN 后跟条件,THEN为显示结果  3、ELSE 为除此之外的默认情况,类似于高级语言程序中...
  • 用法 if ... then ... elsif ... then ... else ... end if; if ... then  ... else ... end if; if ... then ... end if; ...
  • oracleif语句

    千次阅读 2018-07-03 10:25:49
    declare a varchar2...begin if a=1 then dbms_output.put_line(a); dbms_output.put_line('语句2'); --then后面是要执行的语句可以同时有多个 dbms_output.put_line('语句3'); elsif a=2 and a!=3 then ...
  • ORACLE EXECUTE IMMEDIATE 用法

    千次阅读 2016-08-25 17:13:41
    ORACLE EXECUTE IMMEDIATE 用法 EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标...
  • Oracle 中 decode 函数用法...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...Oracle中group by用法Oracle中groupby用法 在select语句中可以使用groupby子句将行划分成较小的组,一旦使用分...
  • oracle case when简单用法 IF-THEN-ELSE

    万次阅读 2014-06-17 18:30:22
    来源:博客园 1. CASE WHEN 表达式有两种形式 ...2. CASE WHEN 在语句中不同位置的用法 ... CASE WHEN 用法 ... CASE WHEN 用法 ...这种方法也是在特殊情况下使用,要多注意逻辑,不要弄错。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,788
精华内容 61,915
关键字:

oracle的if条件的用法