Oracle PL/SQL程序设计 第五版 上册 第四章 条件和顺序控制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle PL/SQL程序设计 第五版 上册 第四章 条件和顺序控制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2627字,纯文字阅读大概需要4分钟。
内容图文
这一章的练习使用,那个scott下的emp表进行。
-
先使用IF / END IF;
if.sql
CREATE OR REPLACE PROCEDURE get_sal(emp_no_in IN NUMBER) AUTHID CURRENT_USER IS l_sal NUMBER; BEGIN SELECT sal INTO l_sal FROM emp WHERE empno = emp_no_in;
IF l_sal > 2000 THEN DBMS_OUTPUT.PUT_LINE(‘OK‘); ELSE DBMS_OUTPUT.PUT_LINE(‘POOR‘); END IF; END; /
执行的是这样的:
main.sql
BEGIN get_sal(7521); END; /
然后就是最全的,加上ELSIF的
if.sql
CREATE OR REPLACE PROCEDURE get_sal(emp_no_in IN NUMBER) AUTHID CURRENT_USER IS l_sal NUMBER; BEGIN SELECT sal INTO l_sal FROM emp WHERE empno = emp_no_in;
IF l_sal BETWEEN 2000 AND 3000 THEN DBMS_OUTPUT.PUT_LINE(‘OK‘); ELSIF l_sal > 3000 THEN DBMS_OUTPUT.PUT_LINE(‘GOD‘); ELSE DBMS_OUTPUT.PUT_LINE(‘POOR‘); END IF; END; /
这里我当时出了一个错误,写了ELSIF后,下面没有写THEN,就报错了。
2. 下面就来case了,继续写一个简单的例子
case.sql
CREATE OR REPLACE PROCEDURE case_demo(emp_no_in IN NUMBER) AUTHID CURRENT_USER IS l_job VARCHAR2(9); BEGIN SELECT job INTO l_job FROM emp WHERE empno = emp_no_in;
CASE l_job WHEN ‘CLERK‘ THEN DBMS_OUTPUT.PUT_LINE(‘CLERK‘); WHEN ‘MANAGER‘ THEN DBMS_OUTPUT.PUT_LINE(‘MANAGER‘); ELSE DBMS_OUTPUT.PUT_LINE(‘SHIT‘); END CASE; END case_demo; /
就是简单的查看JOB。
main.sql
BEGIN get_sal(7839); case_demo(7369); case_demo(7782); END; /
这个是来执行的代码。
新改过的代码是这样的,并且我不细心遇到了错误,弄了半天,才发现问题。
CREATE OR REPLACE PROCEDURE case_demo(emp_no_in IN NUMBER) AUTHID CURRENT_USER IS l_job VARCHAR2(9); l_sal NUMBER; BEGIN SELECT sal INTO l_sal FROM emp WHERE empno = emp_no_in;
CASE WHEN l_sal >= 1000 AND l_sal <= 2000 THEN DBMS_OUTPUT.PUT_LINE(‘1000->2000‘); WHEN l_sal >= 2000 AND l_sal <= 3000 THEN DBMS_OUTPUT.PUT_LINE(‘2000->3000‘); WHEN l_sal > 3000 THEN DBMS_OUTPUT.PUT_LINE(‘>3000‘); ELSE DBMS_OUTPUT.PUT_LINE(‘>3000‘); END CASE; END case_demo; /
原本我以为不用写最后那个ELSE的,但是原来不行,如果使用开始那种形式,是可以不用写的,
但是使用CASE TRUE或者直接CASE,就需要最后的ELSE了。
就是这个问题:CASE not found while executing CASE statement
然后提到的就是case表达式了,这个是用END来结束的没有分号也没有CASE,只是用END结束,这是一个表达式,
返回符号的值,并且如果没有匹配的,就返回NULL。
然后我照着写了一个例子:
CREATE OR REPLACE PROCEDURE give_bonus(emp_no_id IN NUMBER, bonus IN NUMBER) AUTHID CURRENT_USER IS BEGIN DBMS_OUTPUT.PUT_LINE(emp_no_id); DBMS_OUTPUT.PUT_LINE(bonus); END give_bonus; /
之后是这样使用CASE表达式的
DECLARE l_sal NUMBER; BEGIN SELECT sal INTO l_sal FROM emp WHERE empno = 7839; DBMS_OUTPUT.PUT_LINE(l_sal); give_bonus(7839, CASE WHEN l_sal >= 1000 and l_sal <= 2000 THEN 500 WHEN l_sal >2000 and l_sal <= 3000 THEN 400 WHEN l_sal > 3000 THEN 200 END); END; /
这样其实它就是一个表达式,然后表达式会得到一个结果。
之后就介绍到了空语句,以前做单片机的时候,我记得就有这么一个东西,我忘了具体是什么了,这里
用的就是NULL;了,这样直接就代表一个可执行语句,但其实是什么也不执行的意思。
原文:http://my.oschina.net/bxxfighting/blog/387426
内容总结
以上是互联网集市为您收集整理的Oracle PL/SQL程序设计 第五版 上册 第四章 条件和顺序控制全部内容,希望文章能够帮你解决Oracle PL/SQL程序设计 第五版 上册 第四章 条件和顺序控制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。