--判断 循环 异常
/* 语法
IF<条件> THEN
语句
[ELSIF <条件> THEN
语句]
[ELSE
语句]
END IF
*/
--1.
DECLARE
V_SCORE NUMBER;
BEGIN
V_SCORE :='&请输入学生的成绩';
IF V_SCORE >90 THEN
DBMS_OUTPUT.PUT_LINE('送个美女');
ELSE
DBMS_OUTPUT.PUT_LINE('打一顿');
END IF;
END;
--2.
DECLARE
V_SCORE_C NUMBER;
V_SCORE_JAVA NUMBER;
BEGIN
V_SCORE_C :='&请输入学生C的成绩';
V_SCORE_JAVA :='&请输入学生JAVA的成绩';
IF V_SCORE_C>=90 AND V_SCORE_JAVA>=90 THEN
DBMS_OUTPUT.PUT_LINE('奖励个手机');
ELSIF V_SCORE_C>=80 OR V_SCORE_JAVA>=80 THEN
DBMS_OUTPUT.PUT_LINE('跪键盘');
ELSE
DBMS_OUTPUT.PUT_LINE('打一顿');
END IF;
END;
--3.根据月份的值判断该月所属的季节
/*
春季 3,4,5
夏季 6,7,8
秋季 9,10,11
冬季 12,1,2
*/
DECLARE
V_MONTH NUMBER;
V_SEASON VARCHAR2(30);
BEGIN
V_MONTH :='&请输入月份';
IF V_MONTH =12 OR V_MONTH =1 OR V_MONTH =2 THEN
V_SEASON :='冬季';
ELSIF V_MONTH IN(3,4,5) THEN
V_SEASON :='春季';
ELSIF V_MONTH BETWEEN 6 AND 8 THEN
V_SEASON :='夏季';
ELSIF V_MONTH IN(9,10,11) THEN
V_SEASON :='秋季';
ELSE
V_SEASON :='月份错误';
END IF;
DBMS_OUTPUT.PUT_LINE(V_MONTH||'月份是'||V_SEASON);
END;
-----4.JAVA中的swith case 语句
DECLARE
V_SCORE NUMBER;
BEGIN
V_SCORE :='&请输入成绩';
CASE
WHEN V_SCORE >=90 THEN DBMS_OUTPUT.PUT_LINE('奖励个鸡腿');
WHEN V_SCORE >=80 THEN DBMS_OUTPUT.PUT_LINE('玩游戏');
WHEN V_SCORE >=70 THEN DBMS_OUTPUT.PUT_LINE('跪键盘');
ELSE DBMS_OUTPUT.PUT_LINE('打一顿');
END CASE;
END;
--5.循环
/*
LOOP
要执行的语句
IF<条件> THEN
EXIT; --条件满足,退出循环
END IF;
END LOOP;
*/
--第一种
DECLARE
V_NUM NUMBER :=10;
BEGIN
LOOP
V_NUM :=V_NUM -1;
DBMS_OUTPUT.PUT_LINE('I=:'||V_NUM);
IF V_NUM <2 THEN
DBMS_OUTPUT.PUT_LINE('退出了');
EXIT;
END IF;
END LOOP;
END;
--第二种
DECLARE
V_NUM NUMBER :=10;
BEGIN
LOOP
V_NUM :=V_NUM-1;
DBMS_OUTPUT.PUT_LINE('V_NUM:'||V_NUM);
EXIT WHEN V_NUM <2;
--使用exit when(后面使用boolean表达式,如果该表达式返回true则退出循环)语句退出loop
--循环
END LOOP;
END;
--6.升循环
/*
WHILE<布尔表达式>loop
要执行的语句
END LOOP
*/
DECLARE
V_NUM NUMBER :=0;
BEGIN
WHILE V_NUM <20 LOOP
DBMS_OUTPUT.PUT_LINE('V_NUM:'||V_NUM);
V_NUM:=V_NUM+1;
END LOOP;
END;
/*
FOR 循环计算器 IN 上限..下线 LOOP
要执行的语句
END LOOP
*/
DECLARE
V_NUM NUMBER :=0;
BEGIN
FOR I IN 10..20 LOOP--是一个闭区间[]
V_NUM :=V_NUM +1;
DBMS_OUTPUT.PUT_LINE('V_NUM:'||V_NUM);
END LOOP;
END;
--使用循环打印图形
/*
*
**
***
****
*****
*/
DECLARE
BEGIN
FOR I IN 1..5 LOOP
FOR J IN 1..I LOOP
DBMS_OUTPUT.PUT('*'); --不换行输出
END LOOP;
DBMS_OUTPUT.PUT_LINE(''); --打印完一行之后换行
END LOOP;
END;
--使用for循环打印九九乘法表
DECLARE
BEGIN
FOR I IN 1..9 LOOP
FOR J IN 1..I LOOP
DBMS_OUTPUT.PUT(J||'*'||I||'='||(I*J)||' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
END LOOP;
END;
--异常
--1.预定义异常: ORACLE自带
--2.自定义异常 (1.错误 2.业务逻辑需要)
--系统自定义异常处理方式
DECLARE
V_NUM1 NUMBER(5);
V_NUM2 NUMBER(5);
V_RESULT NUMBER(5);
BEGIN
V_NUM1 :='&请输入被除数';
V_NUM2 :='&请输出除数';
V_RESULT :=V_NUM1/V_NUM2;
DBMS_OUTPUT.PUT_LINE('V_RESULT:'||V_RESULT);
EXCEPTION
WHEN ZERO_DIVIDE THEN --当遇到系统自定义异常的时候不需要做另外的处理,直接调用异常
--代码即可捕获
DBMS_OUTPUT.PUT_LINE('输入的除数为0');
DBMS_OUTPUT.PUT_LINE(SQLCODE);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('其他错误');
DBMS_OUTPUT.PUT_LINE(SQLCODE);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/* 语法
IF<条件> THEN
语句
[ELSIF <条件> THEN
语句]
[ELSE
语句]
END IF
*/
--1.
DECLARE
V_SCORE NUMBER;
BEGIN
V_SCORE :='&请输入学生的成绩';
IF V_SCORE >90 THEN
DBMS_OUTPUT.PUT_LINE('送个美女');
ELSE
DBMS_OUTPUT.PUT_LINE('打一顿');
END IF;
END;
--2.
DECLARE
V_SCORE_C NUMBER;
V_SCORE_JAVA NUMBER;
BEGIN
V_SCORE_C :='&请输入学生C的成绩';
V_SCORE_JAVA :='&请输入学生JAVA的成绩';
IF V_SCORE_C>=90 AND V_SCORE_JAVA>=90 THEN
DBMS_OUTPUT.PUT_LINE('奖励个手机');
ELSIF V_SCORE_C>=80 OR V_SCORE_JAVA>=80 THEN
DBMS_OUTPUT.PUT_LINE('跪键盘');
ELSE
DBMS_OUTPUT.PUT_LINE('打一顿');
END IF;
END;
--3.根据月份的值判断该月所属的季节
/*
春季 3,4,5
夏季 6,7,8
秋季 9,10,11
冬季 12,1,2
*/
DECLARE
V_MONTH NUMBER;
V_SEASON VARCHAR2(30);
BEGIN
V_MONTH :='&请输入月份';
IF V_MONTH =12 OR V_MONTH =1 OR V_MONTH =2 THEN
V_SEASON :='冬季';
ELSIF V_MONTH IN(3,4,5) THEN
V_SEASON :='春季';
ELSIF V_MONTH BETWEEN 6 AND 8 THEN
V_SEASON :='夏季';
ELSIF V_MONTH IN(9,10,11) THEN
V_SEASON :='秋季';
ELSE
V_SEASON :='月份错误';
END IF;
DBMS_OUTPUT.PUT_LINE(V_MONTH||'月份是'||V_SEASON);
END;
-----4.JAVA中的swith case 语句
DECLARE
V_SCORE NUMBER;
BEGIN
V_SCORE :='&请输入成绩';
CASE
WHEN V_SCORE >=90 THEN DBMS_OUTPUT.PUT_LINE('奖励个鸡腿');
WHEN V_SCORE >=80 THEN DBMS_OUTPUT.PUT_LINE('玩游戏');
WHEN V_SCORE >=70 THEN DBMS_OUTPUT.PUT_LINE('跪键盘');
ELSE DBMS_OUTPUT.PUT_LINE('打一顿');
END CASE;
END;
--5.循环
/*
LOOP
要执行的语句
IF<条件> THEN
EXIT; --条件满足,退出循环
END IF;
END LOOP;
*/
--第一种
DECLARE
V_NUM NUMBER :=10;
BEGIN
LOOP
V_NUM :=V_NUM -1;
DBMS_OUTPUT.PUT_LINE('I=:'||V_NUM);
IF V_NUM <2 THEN
DBMS_OUTPUT.PUT_LINE('退出了');
EXIT;
END IF;
END LOOP;
END;
--第二种
DECLARE
V_NUM NUMBER :=10;
BEGIN
LOOP
V_NUM :=V_NUM-1;
DBMS_OUTPUT.PUT_LINE('V_NUM:'||V_NUM);
EXIT WHEN V_NUM <2;
--使用exit when(后面使用boolean表达式,如果该表达式返回true则退出循环)语句退出loop
--循环
END LOOP;
END;
--6.升循环
/*
WHILE<布尔表达式>loop
要执行的语句
END LOOP
*/
DECLARE
V_NUM NUMBER :=0;
BEGIN
WHILE V_NUM <20 LOOP
DBMS_OUTPUT.PUT_LINE('V_NUM:'||V_NUM);
V_NUM:=V_NUM+1;
END LOOP;
END;
/*
FOR 循环计算器 IN 上限..下线 LOOP
要执行的语句
END LOOP
*/
DECLARE
V_NUM NUMBER :=0;
BEGIN
FOR I IN 10..20 LOOP--是一个闭区间[]
V_NUM :=V_NUM +1;
DBMS_OUTPUT.PUT_LINE('V_NUM:'||V_NUM);
END LOOP;
END;
--使用循环打印图形
/*
*
**
***
****
*****
*/
DECLARE
BEGIN
FOR I IN 1..5 LOOP
FOR J IN 1..I LOOP
DBMS_OUTPUT.PUT('*'); --不换行输出
END LOOP;
DBMS_OUTPUT.PUT_LINE(''); --打印完一行之后换行
END LOOP;
END;
--使用for循环打印九九乘法表
DECLARE
BEGIN
FOR I IN 1..9 LOOP
FOR J IN 1..I LOOP
DBMS_OUTPUT.PUT(J||'*'||I||'='||(I*J)||' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
END LOOP;
END;
--异常
--1.预定义异常: ORACLE自带
--2.自定义异常 (1.错误 2.业务逻辑需要)
--系统自定义异常处理方式
DECLARE
V_NUM1 NUMBER(5);
V_NUM2 NUMBER(5);
V_RESULT NUMBER(5);
BEGIN
V_NUM1 :='&请输入被除数';
V_NUM2 :='&请输出除数';
V_RESULT :=V_NUM1/V_NUM2;
DBMS_OUTPUT.PUT_LINE('V_RESULT:'||V_RESULT);
EXCEPTION
WHEN ZERO_DIVIDE THEN --当遇到系统自定义异常的时候不需要做另外的处理,直接调用异常
--代码即可捕获
DBMS_OUTPUT.PUT_LINE('输入的除数为0');
DBMS_OUTPUT.PUT_LINE(SQLCODE);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('其他错误');
DBMS_OUTPUT.PUT_LINE(SQLCODE);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;