oracle11plsql,Oracle专题11之PLSQL入门

示例:

DECLARE

v_b1 BOOLEAN := &n1;

v_b2 BOOLEAN := &n2;

BEGIN

IF(v_b1 AND v_b2) THEN

DBMS_OUTPUT.put_line('AND --true');

END IF;

IF(v_b1 OR v_b2) THEN

DBMS_OUTPUT.put_line('OR --true');

END IF;

IF(NOT v_b1) THEN

DBMS_OUTPUT.put_line('b_v1取反为TRUE');

END IF;

END;

e、字符以及数字运算的特点

空值加上数字仍然是空值:NULL + = NULL。

空值加上(连接)字符,结果是字符:NULL || =

7、PLSQL的条件控制语句

- 附加说明:PL/SQL流程控制语句分类:

条件控制语句(条件分支语句):IF语句和CASE语句。

循环语句:LOOP语句。

顺序语句:GOTO语句、NULL语句。

a、条件控制语句:if语句

分为三种条件分支语句:简单条件判断:IF-THEN;二重条件分支:IF-THEN-ELSE;多重条件分支:IF-THEN-ELSIF。

简单条件判断的语法格式:IF condition THEN statements; END IF;

二重条件分支的语法格式:IF condition THEN statements; ELSE statements; END IF;

多重条件分支的语法格式:IF condition THEN statements; ELSIF condition THEN statements; ELSE statements; END IF;

b、条件控制语句:CASE语句

使用CASE语句执行多重条件分支操作,语句更加简捷,执行效率更好。

使用CASE语句处理多重条件分支有两种方法:第一种方法是使用单一选择符进行等值比较;第二种方法是使用多种条件进行非等值比较。

- CASE语句中使用单一选择符进行等值比较的语法格式:

CASE selector

WHEN expression1 THEN sequence_of_statements1;

WHEN expression2 THEN sequence_of_statements2;

......

WHEN expressionN THEN sequence_of_statementsN;

[ELSE sequence_of_statements;]

END CASE;

示例:输入成绩等级,判断属于哪个层次,并打印输出。

DECLARE

v_grade CHAR(1) := '&n';

BEGIN

CASE v_grade

WHEN 'A' THEN

DBMS_OUTPUT.put_line('优秀');

WHEN 'B' THEN

DBMS_OUTPUT.put_line('中等');

WHEN 'C' THEN

Dbms_Output.put_line('一般');

ELSE

DBMS_OUTPUT.put_line('输入有误');

END CASE;

END;

- CASE语句中使用多种条件比较的语法格式:

CASE

WHEN condition1 THEN sequence_of_statements1;

WHEN condition2 THEN sequence_of_statements2;

......

WHEN conditionN THEN sequence_of_statementsN;

[ELSE sequence_of_statements;]

END CASE;

示例:输入员工号,获取员工工资,判断工资,如果工资小于1500,补助加100,如果工资小于2500,补助加80,如果工资小于5000,补助加50。

DECLARE

v_sal emp01.sal%TYPE;

v_empno emp01.empno%TYPE := &no;

BEGIN

SELECT sal INTO v_sal FROM emp01 WHERE empno = v_empno;

CASE

WHEN v_sal < 1500 THEN

UPDATE emp01 SET comm = nvl(comm, 0) + 100 where empno = v_empno;

WHEN v_sal < 2500 THEN

UPDATE emp01 SET comm = nvl(comm, 0) + 80 where empno = v_empno;

WHEN v_sal < 5000 THEN

UPDATE emp01 SET comm = nvl(comm, 0) + 50 where empno = v_empno;

COMMIT;

END CASE;

END;

c、循环语句:基本循环

语法格式:LOOP statement1; ...... END LOOP;

示例:打印数字1到10:。

DECLARE

v_cnt INT :=1;

BEGIN

LOOP

DBMS_OUTPUT.put_line(v_cnt);

EXIT WHEN v_cnt = 10;

v_cnt := v_cnt + 1;

END LOOP;

END LOOP;

d、循环语句:WHILE循环

语法格式:WHILE condition LOOP statement1; statement2; ...... END LOOP;

DECLARE

v_cnt INT :=1;

BEGIN

while v_cnt <= 10 LOOP

DBMS_OUTPUT.put_line(v_cnt);

v_cnt := v_cnt + 1;

END LOOP;

END ;

e、循环语句:FOR循环

语法格式:

FOR counter in [REVERSE] lower_bound ..upper_bound LOOP

statement1; statement2;

......

END LOOP;

示例:打印从1到10。

BEGIN

FOR i IN 1..10 LOOP

Dbms_Output.put_line(i);

END LOOP;

END;

需要注意,其中i为Oracle的隐含控制变量。

f、循环语句:嵌套循环和控制语句

嵌套循环和标号:嵌套循环是指在一个循环语句中嵌入另一个循环语句;标号用于标记嵌套块或者嵌套循环;使用<>定义标号。

DECLARE

v_result INT;

BEGIN

<>

FOR i IN 1..5 LOOP

<>

FOR j IN 1 .. 5 LOOP

v_result := i;

EXIT outter WHEN i = 4;

END LOOP inner;

DBMS_OUTPUT.put_line('内:' || v_result);

END LOOP outter;

DBMS_OUTPUT.put_line('外:' || v_result);

END;

EXIT和EXIT WHEN语句:EXIT语句用于直接退出当前循环。(EXIT WHEN语句用于在满足条件时退出当前循环)

DECLARE

v_cnt INT :=1;

BEGIN

LOOP

DBMS_OUTPUT.put_line(v_cnt);

EXIT WHEN v_cnt = 10;

v_cnt := v_cnt + 1;

END LOOP;

END;

CONTINUE和CONTINUE WHEN语句:

CONTINUE语句时oracle 11g的新特性,用于直接结束当前循环并继续下一组循环。

CONTINUE WHEN语句用于在满足特定条件时结束当前循环语句并继续下一组循环语句。

DECLARE

v_cnt INT := 0;

BEGIN

LOOP

v_cnt := v_cnt + 1;

CONTINUE WHEN v_cnt = 5;

DBMS_OUTPUT.put_line(v_cnt);

EXIT WHEN v_cnt = 10;

END LOOP;

END;

g、顺序语句

GOTO语句:GOTO语句用于跳转到特定标号处执行语句。

语法格式:GOTO label_name;

注意:当使用GOTO跳转到特定标号时,标号后至少要包含一条执行语句。

示例:打印输出1-10,使用GOTO语句处理。

DECLARE

v_cnt INT := 1;

BEGIN

LOOP

DBMS_OUTPUT.put_line(v_cnt);

IF v_cnt = 10 THEN

GOTO end_loop;

END IF;

v_cnt := v_cnt + 1;

END LOOP;

<>

DBMS_OUTPUT.put_line('循环结束');

END;

NULL语句:NULL语句不会执行任何操作,并且会直接将控制传递到下一个语句,使用该语句的主要目的是提高PL/SQL块的可读性。

BEGIN

SELECT ename, sal INTO v_name, v_sal FROM emp01 WHERE empno = &no;

IF v_sal < 3000 THEN

UPDATE emp01 SET comm = nvl(comm, 0) + sal * 0.2 WHERE ename = v_name;

COMMIT;

DBMS_OUTPUT.put_line(v_name || '的奖金更新了');

ELSE

NULL;

END IF;

END;

温馨提示:之后的Oracle专题代码示例大部分在SQL WINDOW窗口下执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值