您的位置:首页 > 数据库 > Oracle

Oracle控制结构

2016-08-19 15:54 267 查看
--条件控制

--IF 语句
  /*  IF <布尔表达式> THEN

        PL/SQL 和 SQL语句

    ELSE

       其它语句

    END IF;*/


    

    declare 

       v_number number:=&no;  --声明变量键盘输入

    begin

       if (v_number=10) then     ---oracle =  //java ==

         dbms_output.put_line('yes');

       else

         dbms_output.put_line('no');   

       end if;

    end;

    

    

/*IF <布尔表达式> THEN

  PL/SQL 和 SQL语句

ELSIF < 其它布尔表达式> THEN

  其它语句

ELSIF < 其它布尔表达式> THEN

  其它语句

ELSE

  其它语句

END IF;*/

select job from emp;

--多重if语句

declare

  v_job emp.job%type:=&job;

begin

    if(v_job='ANALYST') then

       dbms_output.put_line('分析师');

    elsif(v_job='CLERK') then

      dbms_output.put_line('职员');

    elsif(v_job='MANAGER') then

     dbms_output.put_line('经理');

    elsif(v_job='SALESMAN') then

     dbms_output.put_line('销售员');

    else

       dbms_output.put_line('董事');

    end if;

end;

  

--CASE 语句

---------格式一---------
CASE 条件表达式

  WHEN 条件表达式结果1 THEN 

     语句段1

  WHEN 条件表达式结果2 THEN

     语句段2

  ......

  WHEN 条件表达式结果n THEN

     语句段n

  [ELSE 条件表达式结果] 

END;


--查询语句

select ename, job,

case job

  when 'ANALYST' then '分析师'

  when 'CLERK' then  '职员'

  when 'MANAGER' then '经理'

  when 'SALESMAN' then '销售员'

  else '董事'

end 

from emp;

---------格式二---------

CASE 

  WHEN 条件表达式1 THEN

     语句段1

  WHEN 条件表达式2 THEN

     语句段2

  ......

  WHEN 条件表达式n THEN 

     语句段n

  [ELSE 语句段]

END CASE;


--

declare

  v_job emp.job%type:=&job;

begin

    case

    when v_job='ANALYST' then

       dbms_output.put_line('分析师');

    when v_job='CLERK'  then

      dbms_output.put_line('职员');

    when v_job='MANAGER'then

      dbms_output.put_line('经理');

    when v_job='SALESMAN' then

      dbms_output.put_line('销售员');

    else

       dbms_output.put_line('董事');

    end case;   --必须加入case

end;

循环控制

--LOOP 循环
  /*  LOOP

      要执行的语句;

      EXIT WHEN <条件语句> --条件满足,退出循环语句

  END LOOP; */ 


  

  --1-10

  declare

    v_number number:=1;

  begin

     loop

        dbms_output.put_line(v_number);  ---输出结果

        v_number:=v_number+1;             --改变初值

       exit when v_number>10;   --退出结束

     end loop;

  end; 

WHILE 循环
  /*WHILE <布尔表达式> LOOP

    要执行的语句;

  END LOOP;*/  


  declare

    v_number number:=1;

  begin

     while v_number<=10  loop

        dbms_output.put_line(v_number);  ---输出结果

        v_number:=v_number+1;             --改变初值

     end loop; 

  end;

  

FOR 循环

    
/*[<<循环标签>>]

FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP

  要执行的语句;

END LOOP [循环标签];*/


  declare

  begin

     for i in 1..10 loop

        dbms_output.put_line(i);  ---输出结果

     end loop;

  end;

  

  --1-10偶数?

  begin

     for i in 1..10 loop

        --判断

         if(i mod 2=0) then

          dbms_output.put_line(i);  ---输出结果

        end if;

     end loop;

  end;

  

    --1-10偶数的和

    declare

       v_sum number:=0;  --和的初始值

     begin

     for i in 1..10 loop

        --判断

         if(i mod 2=0) then  

            v_sum:=v_sum+i;

        end if;

     end loop;

    dbms_output.put_line(v_sum);  ---输出结果

  end;

 -- 4.为员工SCOTT增加工资,每次增加100元,直到10000元停止。

 select * from emp;

 

 --复制新表

 create table empnews as select * from emp ;

 

  select * from empnews where ename='SCOTT';

  

  drop table empnews;

  

  

  declare

    v_sal empnews.sal%type;

  begin

     select sal into v_sal from empnews where ename='SCOTT';

     dbms_output.put_line(v_sal);   ---3000  

     --循环

     while v_sal<10000 loop

         --更新语句

       update empnews set sal = v_sal+100 where ename='SCOTT'; 

       --查询 

       select sal into v_sal from empnews where ename='SCOTT';

     end loop;  

  end;

 

--顺序控制  exit,continue 11g (没有break;而是用exit哦!)

--10g

--GOTO 语句

DECLARE

   V_counter NUMBER := 1;

BEGIN

   LOOP 

     DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);

     V_counter := v_counter + 1;

   IF v_counter > 10 THEN

       GOTO labelOffLOOP;  --退出循环 break

   END IF;

   END LOOP;

   <<labelOffLOOP>>

     DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);

END;

DECLARE

   v_i NUMBER := 0;

   v_s NUMBER := 0;

BEGIN

   <<label_1>>

   v_i := v_i + 1;

   IF v_i <= 10 THEN

      v_s := v_s + v_i;

      GOTO label_1;  --continue 继续循环

   END IF;

   DBMS_OUTPUT.PUT_LINE(v_s); 

END;

--NULL 语句

select * from emp;

DECLARE

   v_empno emp.empno%TYPE:=&no;

   v_ename emp.ename%TYPE;

   v_sal emp.sal%TYPE;

BEGIN

   SELECT ename,sal INTO v_ename, v_sal FROM emp WHERE empno=v_empno;

   IF v_sal <= 3000 THEN

      DBMS_OUTPUT.PUT_LINE(v_ename||'的工资是'||v_sal);

   ELSE

      NULL;   ---可以用 null 语句来说明“不用做任何事情”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。

   END IF;

END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: