Oracle控制结构

来源:互联网 发布:尤克里里调音软件G 编辑:程序博客网 时间:2024/06/08 12:41
--条件控制
--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;
0 0
原创粉丝点击