学习资料

学习的笔记


第七章 分支(条件语句)语句

<p>[TOC]</p> <h1>第七章 分支(条件)语句</h1> <h2>7.1 PL/SQL 中的布尔条件</h2> <ul> <li>布尔值有三个,TRUE,FALSE,NULL </li> <li>逻辑 AND ,OR ,NOT 与以上三个布尔值使用</li> <li>AND ,只要有 FALSE 就是 FALSE,除此之外只要有 NULL 就是 NULL</li> <li>OR ,只要有 TRUE 就是 TRUE,除此之外只要有 NULL 就是 NULL </li> <li>引出一个问题,表达式写的前后问题</li> <li>NOT NULL 等于 NULL</li> </ul> <h2>7.2 IF语句以及简单IF语句的实例</h2> <ul> <li>出现频率较高的条码放 IF 前面,有利提高效率</li> </ul> <pre><code>--简单 if 语句 SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_age NUMBER := &amp; p_age; BEGIN IF v_age &lt; 60 THEN dbms_output.put_line('您不到退休年龄,还必须继续工作为革命事业再做些贡献!!!'); END IF; END; --简单if语句,增加一点条件 SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_age NUMBER := &amp;p_age; v_gender CHAR(1) := '&amp;p_sex'; BEGIN IF (v_age BETWEEN 18 AND 35)AND(v_gender = 'F') THEN dbms_output.put_line('这位靓女可能成为老板的下任秘书!!!'); END IF; END; /</code></pre> <h2>7.3 IF-THEN-ELSE 和 IF-THEN-ELSIF 语句的执行流程</h2> <ul> <li>ELSE 可有可无,如有只能有一个</li> <li>ELSIF 可以有多个 </li> </ul> <h2>7.4 IF-THEN-ELSE 语句的实例</h2> <pre><code>--两个分支 SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_shipdate DATE := '&amp;p_shipdate'; v_orderdate DATE := '&amp;p_orderdate'; v_ship_flag VARCHAR2(16); BEGIN IF v_shipdate - v_orderdate &lt; 8 THEN v_ship_flag := 'Acceptable'; dbms_output.put_line('该公司的服务不错!!'); ELSE v_ship_flag := 'UnAcceptable'; dbms_output.put_line('该公司的服务太差了!!'); END IF; dbms_output.put_line(v_ship_flag); END; /</code></pre> <p>60 65 80 90 10</p> <h2>7.5 IF-THEN-ELSIF 语句的实例</h2> <pre><code>--多个分支 SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_age NUMBER := &amp;p_age; BEGIN IF v_age &lt; 60 THEN dbms_output.put_line('你年龄&lt;60'); ELSIF v_age &lt; 65 THEN dbms_output.put_line('你年龄在[60,65)'); ELSIF v_age &lt; 80 THEN dbms_output.put_line('你年龄在[65,80)'); ELSIF v_age &lt; 90 THEN dbms_output.put_line('你年龄在[80,90)'); ELSIF v_age &lt; 100 THEN dbms_output.put_line('你年龄在[90,100)'); ELSE dbms_output.put_line('你的年龄大于等于100'); END IF; END; /</code></pre> <h2>7.6 CASE 表达式</h2> <pre><code>--选择CASE表达式,有返回值的 SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_degree CHAR(1) := UPPER('&amp;p_degree'); v_description VARCHAR2(250); BEGIN v_description := CASE v_degree WHEN 'B' THEN '此人拥有学士学位。' WHEN 'M' THEN '此人拥有硕士学位。' WHEN 'D' THEN '此人拥有博士学位。' ELSE '此人拥有壮士学位' END; dbms_output.put_line(v_description); END; / --搜索CASE表达式,有返回值的 SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_degree CHAR(1) := UPPER('&amp;p_degree'); v_description VARCHAR2(250); BEGIN v_description := CASE WHEN v_degree = 'B' THEN '此人拥有学士学位。' WHEN v_degree = 'M' THEN '此人拥有硕士学位。' WHEN v_degree = 'D' THEN '此人拥有博士学位。' ELSE '此人拥有壮士学位' END; dbms_output.put_line(v_description); END; /</code></pre> <h2>7.7 CASE 语句</h2> <pre><code>--CASE语句无返回值,可以有完成的程序块,需要结束语句end case SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_degree CHAR(1) := UPPER('&amp;p_degree'); BEGIN CASE v_degree WHEN 'B' THEN dbms_output.put_line('此人拥有学士学位。'); WHEN 'M' THEN dbms_output.put_line('此人拥有硕士学位。'); WHEN 'D' THEN dbms_output.put_line('此人拥有博士学位。'); WHEN 'X' THEN dbms_output.put_line('此人拥有壮士学位'); ELSE dbms_output.put_line('没有这一学位'); END CASE; END; / -- SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_empno NUMBER := &amp;p_empno; v_ename VARCHAR2(30) ; v_job emp.job%TYPE; v_sal emp.sal%TYPE; BEGIN SELECT job INTO v_job FROM emp WHERE empno = v_empno; CASE v_job WHEN 'SALESMAN' THEN SELECT empno,ename,job,sal*1.15 INTO v_empno,v_ename,v_job,v_sal FROM emp WHERE empno = v_empno ; dbms_output.put_line(v_job||' '||v_ename||'加薪后的工资为:'||v_sal); WHEN 'CLERK' THEN SELECT empno,ename,job,sal*1.20 INTO v_empno,v_ename,v_job,v_sal FROM emp WHERE empno = v_empno ; dbms_output.put_line(v_job||' '||v_ename||'加薪后的工资为:'||v_sal); WHEN 'ANALYST' THEN SELECT empno,ename,job,sal*1.25 INTO v_empno,v_ename,v_job,v_sal FROM emp WHERE empno = v_empno ; dbms_output.put_line(v_job||' '||v_ename||'加薪后的工资为:'||v_sal); WHEN 'MANAGER' THEN SELECT empno,ename,job,sal*1.40 INTO v_empno,v_ename,v_job,v_sal FROM emp WHERE empno = v_empno ; dbms_output.put_line(v_job||' '||v_ename||'加薪后的工资为:'||v_sal); ELSE SELECT job,ename,sal INTO v_job,v_ename,v_sal FROM emp WHERE empno = v_empno; dbms_output.put_line(v_job||' '||v_ename||'无加薪计划,工资依然是:'||v_sal); END CASE; END; /</code></pre> <h2>7.8 GOTO 语句</h2> <pre><code>--goto能不用就不用 SQL&gt; SET VERIFY OFF SQL&gt; SET serveroutput ON DECLARE v_num NUMBER := &amp;p_num; v_count NUMBER := 0 ; BEGIN &lt;&lt;loop_start&gt;&gt; IF v_count = 0 THEN dbms_output.put_line(v_count||'这个数为:0。'); ELSIF v_count &lt; 2 THEN dbms_output.put_line(v_count||'这个数小于2。'); ELSIF (v_count MOD 2 ) &lt;&gt; 0 THEN --不能被2整除 dbms_output.put_line(v_count||'是奇数。'); ELSE dbms_output.put_line(v_count||'是偶数。'); END IF ; v_count := v_count + 1; IF v_count &lt;= v_num THEN GOTO loop_start; END IF; END; /</code></pre>

页面列表

ITEM_HTML