首页 > 技术文章 > Oracle数据库之SQL基础和分支循环

sutao 2017-08-18 21:08 原文

一、SQL基础语言

DECLARE --声明
a varchar2(10); --变量或对象

BEGIN
  a:='小明';--  :=   表示给一个变量赋值
  dbms_output.put_line(a); --输出用 dbms_output.put_line()
  
END;

二、分支

DECLARE
  --声明
  A NUMBER(10);
  B NUMBER(10);

BEGIN

  A := 2;
  B := 3;
  
  IF A < B THEN
    DBMS_OUTPUT.PUT_LINE('a小于b');
  ELSIF A > B THEN --注意 ELSIF 的写法
    DBMS_OUTPUT.PUT_LINE('a大于b');
  ELSE
    DBMS_OUTPUT.PUT_LINE('a等于b');
  END IF;
  
END;

三、循环

第一种:(loop循环)

DECLARE

  M NUMBER(5);
  
BEGIN
  M := 5;
  
  LOOP
    EXIT WHEN M < 0;
    DBMS_OUTPUT.PUT_LINE(M);
    M := M - 1;
  END LOOP;
  
END;

执行结果:

第二种:(while 循环

DECLARE

  M NUMBER(5);

BEGIN
  M := 5;

  WHILE M > 0 LOOP   --while 循环
    DBMS_OUTPUT.PUT_LINE(M);
    M := M - 1;
  END LOOP;

END;

执行结果:

 

第三种:(for循环)

DECLARE

BEGIN

  FOR N IN 1 .. 5 LOOP
    --for 循环只能遍历像1~5这样的有规律的数字
    DBMS_OUTPUT.PUT_LINE(N);
  END LOOP;

END;

执行结果:

四、处理异常

DECLARE
  M     NUMBER(10);
  SNAME VARCHAR2(10);

BEGIN

  M := 5;

  SELECT S.NAME INTO SNAME FROM Z_STUDENT S WHERE S.ID = M;
  DBMS_OUTPUT.PUT_LINE('查询结果:' || SNAME);

END;

执行结果:

然后抛出异常  exception

DECLARE
  M     NUMBER(10);
  SNAME VARCHAR2(10);

BEGIN

  M := 50; --改个不存在的值

  SELECT S.NAME INTO SNAME FROM Z_STUDENT S WHERE S.ID = M;
  DBMS_OUTPUT.PUT_LINE('查询结果:' || SNAME);

EXCEPTION
  --抛出异常
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('没有查询到数据');
  
END;

执行结果:

再举个例子:

DECLARE
  --声明
  A NUMBER(10);
  B NUMBER(10);
  NOZERO EXCEPTION; --定义nozero  为异常类型
BEGIN

  A := 2;
  B := 0;

  IF A = 0 OR B = 0 THEN
    RAISE NOZERO; --RAISE   抛出异常
  END IF;

  IF A < B THEN
    DBMS_OUTPUT.PUT_LINE('a小于b');
  ELSIF A > B THEN
    --注意 ELSIF 的写法
    DBMS_OUTPUT.PUT_LINE('a大于b');
  ELSE
    DBMS_OUTPUT.PUT_LINE('a等于b');
  END IF;

EXCEPTION
  WHEN NOZERO THEN
    DBMS_OUTPUT.PUT_LINE('a和b都不能为0!');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('其他异常!');
  
END;

执行结果为:

 

推荐阅读