select decode(a||b,null,null,a+b) c from tab_name

解决方案 »

  1.   

    控制结构
    控制结构控制PL/SQL程序流程的代码行,PL/SQL支持条件控制和循环控制结构。
    语法和用途
    IF..THEN
    语法:
    IF condition THEN
    Statements 1;
    Statements 2;
     ....
    END IF 
        IF语句判断条件condition是否为TRUE,如果是,则执行THEN后面的语句,如果condition为false或NULL则跳过THEN到END IF之间的语句,执行END IF后面的语句。
    IF..THEN...ELSE
    语法:
    IF condition THEN
    Statements 1;
    Statements 2;
     ....
    ELSE
    Statements 1;
    Statements 2;
     ....
    END IF 
        如果条件condition为TRUE,则执行THEN到ELSE之间的语句,否则执行ELSE到END IF之间的语句。
    IF 可以嵌套,可以在IF 或IF ..ELSE语句中使用IF或IF..ELSE语句。
    if (a>b) and (a>c) then
    g:=a;
    else
    g:=b;
    if c>g then
    g:=c;
    end if
    end if 
    IF..THEN..ELSIF
    语法:
    IF condition1 THEN
    statement1;
    ELSIF condition2 THEN
    statement2;
    ELSIF condition3 THEN
    statement3;
    ELSE
    statement4;
    END IF;
    statement5;
        如果条件condition1为TRUE则执行statement1,然后执行statement5,否则判断condition2是否为TRUE,若为TRUE则执行statement2,然后执行statement5,对于condition3也是相同的,如果condition1,condition2,condition3都不成立,那么将执行statement4,然后执行statement5。
    循环控制
        循环控制的基本形式是LOOP语句,LOOP和END LOOP之间的语句将无限次的执行。LOOP语句的语法如下:
    LOOP 
    statements;
    END LOOP
         LOOP和END LOOP之间的语句无限次的执行显然是不行的,那么在使用LOOP语句时必须使用EXIT语句,强制循环结束,例如:
    X:=100;
    LOOP
    X:=X+10;
    IF X>1000 THEN
    EXIT;
    END IF
    END LOOP;
    Y:=X; 
    此时Y的值是1010.
    EXIT WHEN语句将结束循环,如果条件为TRUE,则结束循环。
    X:=100;
    LOOP
    X:=X+10;
    EXIT WHEN X>1000;
    X:=X+10;
    END LOOP;
    Y:=X;
    WHILE..LOOP
        WHILE..LOOP有一个条件与循环相联系,如果条件为TRUE,则执行循环体内的语句,如果结果为FALSE,则结束循环。
    X:=100;
    WHILE X<=1000 LOOP
    X:=X+10;
    END LOOP;
    Y=X; 
    FOR...LOOP
    语法:
    FOR counter IN [REVERSE] start_range....end_range LOOP
    statements;
    END LOOP; 
        LOOP和WHILE循环的循环次数都是不确定的,FOR循环的循环次数是固定的,counter是一个隐式声明的变量,他的初始值是start_range,第二个值是start_range+1,直到end_range,如果start_range等于end _range,那么循环将执行一次。如果使用了REVERSE关键字,那么范围将是一个降序。
    X:=100;
    FOR v_counter in 1..10 loop
    x:=x+10;
    end loop
    y:=x; 
    如果要退出for循环可以使用EXIT语句。
      

  2.   

    select decode(a,null,null,decode(b,null,null,a+b)) c from dual
      

  3.   

    decode 只能用于返回的结果字段中
      

  4.   

    楼主的意思应该是两者都为null是才为null吧,楼上的那个只要有一个为Null就为null了
      

  5.   

    select decode(a,null,decode(b,null,null,a+b)) c from tablename
      

  6.   

    select decode(a||b,null,null,a+b) c from tab_name
      

  7.   

    如果 a=null,b=null 那么c=null;
    这句如何理解,是 
     if a=null and b=null then c=null?
    还是
     if a=null or b=null then c=null????
      

  8.   

    最简单的表达是
    select a||b c from tab_name
      

  9.   

    我的意思是a和b同是为空,则c值为空,否则c值等于a连接b,a,b为varchar2类型.
      

  10.   

    我觉得在ORACLE中直接连接即可。
    a=null,b=null那么c=a||b =null;
    a=null,b='b'那么c=a||b = 'b';
    a='a',b='b'那么c=a||b='ab';
    没什么问题。