惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
GbyAI
GbyAI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
U
Unit 42
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
Vercel News
Vercel News
美团技术团队
雷峰网
雷峰网
Recent Announcements
Recent Announcements
有赞技术团队
有赞技术团队
D
DataBreaches.Net
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
罗磊的独立博客
MyScale Blog
MyScale Blog
博客园_首页
IT之家
IT之家
F
Fortinet All Blogs
博客园 - Franky

博客园 - 德仔

Win7环境下装SQL SERVER 2005 IIS的设置 C# Winform 使用 MYSQL 新增,读取数据乱码问题 gridview中的" "问题解决方法 [译]SQL2005/2008错误18456 登录失败的 解决方案 Compilation Error 解决方案汇集 KM知识管理推广方案 Oracle EBS: ASCP 学习 PL-SQL问题集锦 Global.asax文件失效的解决办法 一份DBA面试题 oracle:IF语句 Loop循环 Cursor的用法(二) Oracle EBS:PO行接收关闭后修改其它行自动打开 异常:HRESULT: 0x80070057 (E_INVALIDARG) 的处理 NPOI动态获取数据源绑定Gridview显示 Oracle EBS:SQL 失效一揽子PO协议 Web开发电子期刊 2010年第5期(第45期) Oracle EBS: 获取PO审批人名字 [译]Oracle EBS:追踪PO全过程 Oracle PL/SQL:IF语句的基本使用
Oracle:IF语句 Loop循环 Cursor的用法(一)
德仔 · 2010-10-08 · via 博客园 - 德仔

这个我一时忘记是从哪里获取来的,只是IF..Else与Loop的结合使用在PL-SQL中运用得很多,发挥的作用也是不言而喻的.

那就从最基本的开始吧,我这里也只能给出Example代码,权当复习一下,与大家分享

1.IF语句

基本的语句:

格式: IF 条件 THEN
         执行.
END IF

Example:

set serveroutput on

DECLARE
x NUMBER(3) := 9;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X is less than 10');
  END IF;
END;
/

set serveroutput on
DECLARE
x NUMBER(3) := 10;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X is less than 10');
  ELSE
    dbms_output.put_line('X is not less than 10');
  END IF;
END;
/

3.IF - ELSIF - ELSE 语句
格式:
IF <执行的条件>THEN
<执行代码>
ELSIF <执行的条件>THEN
<执行代码>
ELSIF <执行的条件>THEN
<执行代码>
ELSE
<执行代码>
END IF;
Example:

set serveroutput on

DECLARE
x NUMBER(3) := 47;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X 小于 10');
  ELSIF x = 10 THEN
    dbms_output.put_line('X 等于 10');
  ELSIF x < 100 THEN
    dbms_output.put_line('X 在 11 与 99 之间');
  ELSE
    dbms_output.put_line('X 大于 99');
  END IF;
END;
/

Basic Loop

测试表:
Create TABLE loop_test (test_col VARCHAR2(5));

1.Loop

格式:
LOOP
<执行代码>
END LOOP;

Example:

DECLARE
i PLS_INTEGER := 1;
BEGIN
  LOOP
    i := i + 1;

    Insert INTO loop_test VALUES (i);

    IF i > 99 THEN
      EXIT;
    END IF;
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;

注:基本的LOOP循环的执行需要通过代码去判断何时开始与结束

2.While Loop

如果不能确定循环的基数时,采用WHILE LOOP.While LOOP是保证至少执行了一次循环

WHILE <执行的条件>
LOOP
<执行代码>
END LOOP;

DECLARE
i PLS_INTEGER := 999;
BEGIN
  WHILE i < 1100 LOOP
    i := i + 1;

    Insert INTO loop_test VALUES (i);
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;

3.FOR Loop

格式:
-- incrementing
FOR <变量>IN <开始数> .. <结束数>
LOOP
<执行代码>
END LOOP;

-- decrementing
FOR <变量>IN REVERSE <开始数> .. <结束数>
LOOP
<执行代码>
END LOOP;

Example:

BEGIN
  FOR i IN 2000 .. 2100 LOOP
    Insert INTO loop_test VALUES (i);
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;

BEGIN
  FOR i IN REVERSE 3000 .. 3100 LOOP
    Insert INTO loop_test VALUES (i);
  END LOOP;
  COMMIT;
END;
/

Select * FROM loop_test;

Continue的用法

格式:

LOOP
<执行代码>
  CONTINUE;
<执行代码>
END LOOP;

Example:

set serveroutput on

Create or REPLACE PROCEDURE cont_test (val IN POSITIVEN) IS
BEGIN
  FOR i IN 1 .. 3 LOOP
    dbms_output.put_line('i=' || TO_CHAR(i));

    IF val = 2 THEN
      CONTINUE;
    END IF;

    dbms_output.put_line('Did not jump to the top of the loop');
  END LOOP;
END cont_test;
/

exec cont_test(3);
exec cont_test(2);