`

精通Oracle10编程SQL(7)编写控制结构

阅读更多
/*
 *编写控制结构
 */
 
--条件分支语句
--简单条件判断
DECLARE
  v_sal NUMBER(6,2);
BEGIN
  select sal into v_sal from emp
  where lower(ename)=lower('&name');
  if v_sal<2000 then
     update emp set sal=v_sal+200
     where lower(ename)=lower('&name');
  end if;
end;

select * from emp;

--二重条件分支
--如果雇员补助不是0,则在原来的基础上增加100元,如果补助为0或NULL时,则设置其补助为200元
DECLARE
  v_comm NUMBER(6,2);
BEGIN
  select comm into v_comm from emp where empno=&no;
  if v_comm <> 0 then
     update emp set comm=v_comm+100 where empno=&no;
  else
     update emp set comm=200 where empno=&no;
  end if;
end;

--多重条件分支
DECLARE
  v_job VARCHAR2(10);
  v_sal NUMBER(6,2);
BEGIN
  SELECT JOB,SAL INTO v_job,v_sal from emp where empno=&no;
  if upper(v_job)=upper('president') then
     update emp set sal=v_sal+1000 where empno=&no;
  elsif upper(v_job)=upper('manager') then
     update emp set sal=v_sal+500 where empno=&no;
  else
     update emp set sal=v_sal+200 where empno=&no;
  end if;
END;

select * from emp;

--CASE语句
--在CASE语句中使用单一选择符进行等值比较
DECLARE
   v_deptno emp.deptno%TYPE;
begin
   v_deptno:=&no;
   case v_deptno
      when 1 then
         update emp set comm=100 where deptno=v_deptno;
      when 2 then
         update emp set comm=80 where deptno=v_deptno;
      when 3 then
         update emp set comm=50 where deptno=v_deptno;
      else
         dbms_output.put_line('不存在该部门');
   end case;
end;

select * from emp;

--在CASE语句中使用多种条件比较
DECLARE
  v_sal emp.sal%TYPE;
  v_ename emp.ename%TYPE;
begin
  select ename,sal into v_ename,v_sal from emp where empno=&no;
  case 
    when v_sal<1000 then
      update emp set comm=100 where ename=v_ename;
    when v_sal<2000 then 
      update emp set comm=90 where ename=v_ename;
    when v_sal<6000 then
      update emp set comm=50 where ename=v_ename;
  end case;
end;

select * from emp;

--循环语句
--基本循环
create table temp(cola int);

DECLARE
  i INT:=1;
begin
  LOOP
    insert into temp values(i);
    exit when i=10;
    i:=i+1;
  end loop;
end;

select * from temp;

--WHILE循环
DECLARE
  i INT:=1;
begin
  while i<=10 loop
    insert into temp values(i);
    i:=i+1;
  end loop;
end;

--FOR循环
begin
  for i in reverse 1..10 LOOP
    insert into temp values(i);
  end loop;
end;

--嵌套循环和标号
DECLARE
  result int;
BEGIN
  <<outer>>
  for i in 1..100 loop
     <<inter>>
     for j in 1..100 loop
       result:=i*j;
       exit outer when result=1000;
       exit when result=500;
     end loop inner;
     dbms_output.put_line(result);
  end loop outer;
  dbms_output.put_line(result);
end;

--顺序控制语句
--GOTO
DECLARE
  i INT:=1;
begin
  LOOP
     INSERT INTO temp values(i);
     if i=10 then
       goto end_loop;
     end if;
     i:=i+1;
  end loop;
  <<end_loop>>
  dbms_output.put_line('循环结束');
END;

--NULL
--NULL语句不会执行任何操作,并且会直接将控制传递到下一条语句
--使用NULL语句的主要好处是可以提高PL/SQL程序的可读性
--如果雇员工资低于300,则将其补助设置为工资的10%,如果雇员工资高于3000,则不会执行任何操作(NULL)
DECLARE
  v_sal emp.sal%TYPE;
  v_ename emp.ename%TYPE;
BEGIN
  select ename,sal into v_ename,v_sal
  from emp where empno=&no;
  if v_sal<300 then
     update emp set comm=sal*0.1 where ename=v_ename;
  else
     null;
  end if;
end;

select * from emp;

 

分享到:
评论

相关推荐

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

     第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象...

    精通Oracle.10g.PLSQL编程

    编写控制结构 7.1 条件分支语句 7.2 CASE语句 7.3 循环语句 7.4 顺序控制语句 7.5 习题 第8章 使用复合数据类型 8.1 PL/SQL记录 8.1.1 定义PL/SQL记录 8.1.2 使用PL/SQL...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

     第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象...

    Oracle 11g SQL和PL SQL从入门到精通〖送源代码〗

     第13章编写控制结构  第14章使用复合数 据类型  第15章使用游标  第16章异常处理 . 第17章本地动态SQL  第18章PL/SQL过程  第19章PL/SQL函数  第20章PL/SQL包  第21章触发器  第22章使用对象类型 第四...

    Oracle 11g SQL和PL SQL从入门到精通.part1

     第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象...

    Oracle 11g SQL和PL SQL从入门到精通part2 pdf格式电子书 下载(二)

     第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象...

    精通Oracle.10g.Pl.SQL编程

    本书包括:PL/SQL 综述、PL/SQL 开发工具、PL/SQL 基础、使用SQL语句、SQL函数、访问Oracle 、编写控制结构、使用复合数据类型、使用游标、处理例外、开发子程序等内容。 作者:王海亮 出版社:中国水利水电出版社

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    Oracle11g从入门到精通2

    4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 ...

    Oracle11g从入门到精通

    4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除...

    Oracle.11g.从入门到精通 (2/2)

    4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除过程 4.3.4 ...

    Oracle.11g.从入门到精通 (1/2)

    4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建过程 4.3.2 调用过程 4.3.3 删除过程 4.3.4 ...

    Perl 实例精解(第三版).pdf

    6.1 控制结构,块和复合语句 6.2 决策--条件结构 6.2.1 if和unless语句 6.2.2 unless语句结构 6.3 循环 6.3.1 while循环 6.3.2 until循环 6.3.3 for循环 4.5.2 values函数 4.5.3 each函数...

    C程序设计语言(第2版·新版中文)

    热门Tag JAVA C++ linux C# 教程 C语言 android 源码 PDF 编程 sql c Windows matlab ORACLE 源代码 api 中文 数据库 arm JavaScript 破解 数据结构 vc visual jQuery 计算机 答案 单片机 php JSP mfc .NET 中文版 ...

    asp.net知识库

    Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的...

Global site tag (gtag.js) - Google Analytics