开发者社区> 异步社区> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《Oracle PL/SQL程序设计(第5版)》一一1.3 这就是PL/SQL

简介:
+关注继续查看

本节书摘来自异步社区出版社《Oracle PL/SQL程序设计(第5版)》一书中的第1章,第1.3节,作者:【美】Steven Feuerstein , Bill Pribyl,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.3 这就是PL/SQL

Oracle PL/SQL程序设计(第5版)
如果你对编程或者使用PL/SQL(或者甚至是SQL)还完全是个新手,学习PL/SQL看起来可能有点可怕。如果是这样,不要急!我肯定你会发现这要比你想的简单得多。我之所以这么肯定是由于两个原因。

计算机语言总的来说都不难学,至少和第二种或者第三种“人类语言”比起来是这样。为什么?因为计算机还没有那么聪明(它们“思考”─执行操作─很快,可是没有创新能力)。我们必须要靠严格的语法才能准确地告诉计算机我们到底要让它做什么。因此导致语言也是很严格的(没有例外!)因此我们学起来也很容易。
和其他的编程语言比起来,PL/SQL也确实是一种很容易的语言。它的不同单元都是使用一种高度结构化的“块”设计,全都是通过显式的、自我说明的关键字来标识。
我们通过几个例子演示一下PL/SQL结构和功能有关的一些关键元素。

1.3.1 与SQL整合

PL/SQL一个最重要的方面就在于它和SQL是紧密整合的。我们在PL/SQL程序中运行SQL语句无需借助任何类似于ODBC(开发数据库连接)或者JDBC(Java数据库连接)这样的中间软件“粘合剂”。相反,我们只需要在代码中插入UPDATE或者SELECT就可以了,像这样:

1 DECLARE
 2   l_book_count INTEGER;
 3
 4 BEGIN
 5   SELECT COUNT(*)
 6    INTO l_book_count
 7    FROM books
 8   WHERE author LIKE '%FEUERSTEIN, STEVEN%';
 9  
10   DBMS_OUTPUT.PUT_LINE (
11    'Steven has written (or co-written) ' ||
12     l_book_count ||
13     ' books.');
14
15   -- 噢,我已经改名了,所以..
16   UPDATE books
17    SET author = REPLACE (author, 'STEVEN', 'STEPHEN')
18   WHERE author LIKE '%FEUERSTEIN, STEVEN%';
19 END;

我们通过下面这个表仔细的分析一下这段代码。
image

1.3.2 控制和条件逻辑

PL/SQL提供了一套完整的语句我们可以紧密的控制程序执行哪一行代码。这些语句包括以下几项。

IF和CASE语句。
这些语句实现了条件逻辑,例如,“如果一本书的页数大于1000,则……”。

完整的循环及迭代控制。
包括FOR循环、WHILE循环以及简单循环。

GOTO语句。
是的,PL/SQL甚至还提供的GOTO语句,我们可以无条件地从程序的一部分转到另一部分。不过,这并不意味者我们就应该用它。

下面是一个过程(一个可以通过名字进行调用的可重用代码块)说明了这些特性。

1 PROCEDURE pay_out_balance (
 2   account_id_in IN accounts.id%TYPE)
 3 IS
 4   l_balance_remaining NUMBER;
 5 BEGIN
 6   LOOP
 7    l_balance_remaining := account_balance (account_id_in);
 8
 9    IF l_balance_remaining < 1000
10    THEN
11      EXIT;
12    ELSE
13      apply_balance (account_id_in, l_balance_remaining);
14    END IF;
15   END LOOP;
16 END pay_out_balance;

我们通过下面这个表详细地分析一下这个代码块。

image

1.3.3 出现错误了

PL/SQL语言同时为抛出错误和处理错误提供了强大的处理机制。在下面这个过程中,我更具ID获得某个账户的名字和余额,然后查看余额是否太少了;如果确实太少了,我就明确的抛出一个异常,终止程序继续操作。

1 PROCEDURE check_account (
 2   account_id_in IN accounts.id%TYPE)
 3 IS
 4   l_balance_remaining    NUMBER;
 5   l_balance_below_minimum  EXCEPTION;
 6   l_account_name      accounts.name%TYPE;
 7 BEGIN
 8   SELECT name
 9    INTO l_account_name
10    FROM accounts
11   WHERE id = account_id_in;
12
13   l_balance_remaining := account_balance (account_id_in);
14
15   DBMS_OUTPUT.PUT_LINE (
16    'Balance for ' || l_account_name ||
17     ' = ' || l_balance_remaining);
18
19   IF l_balance_remaining < 1000
20   THEN
21    RAISE l_balance_below_minimum;
22   END IF;
23
24 EXCEPTION
25   WHEN NO_DATA_FOUND
26   THEN
27    -- No account found for this ID
28    log_error (...);
29
30   WHEN l_balance_below_minimum
31   THEN
32    log_error (...);
33    RAISE;
34 END;

我们用下面这个表详细的分析下这段代码中的错误处理方面:

image

这个错误处理部分针对的的是账户余额太少的错误(我这个应用程序特有的异常)。如果抛出的异常时l_balance_below_minimun,这个异常在这里被捕获,错误被记下来。然后,考虑到这个错误的严重性,我又一次把这个错误抛出去,把这个错误传出当前过程,传给调用它的PL/SQL块

第6章会带你充分了解PL/SQL的错误处理机制。

当然,关于PL/SQL还有许多可说─这也是为什么这本书有上千页的内容要学!不过,这些初始的例子应该能让你对将要用PL/SQL编写的代码有些感觉,包括一些最重要的语法元素,以及编写─读懂─PL/SQL代码的容易程度。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ]   [ WITH     { RECOMPILE | ENCRY
986 0
SQL Server基础之<存储过程>
原文:SQL Server基础之   简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理。本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作。
1087 0
SQL Server内存遭遇操作系统进程压榨案例
原文:SQL Server内存遭遇操作系统进程压榨案例 场景:   最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁。
931 0
SQL Server页类型汇总+疑问
原文:SQL Server页类型汇总+疑问 该文章整理自:http://www.sqlnotes.info/2011/10/31/page-type/             SQL Server中包含多种不同类型的页,来满足数据存储的需求。
899 0
看了此文,Oracle SQL优化文章不必再看!
  第一章 看了此文,Oracle SQL优化文章不必再看! DBAplus社群 | 2015-11-17 23:44 目录SQL优化的本质 SQL优化Road Map 2.
1182 0
sqlServer存储过程
1、创建存储过程报错:     'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。 解决方法: use databaseName 后面要加上一句: GO ...
536 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Server 2017
立即下载
SQL Sever迁移PG经验
立即下载
Oracle 至PostgreSQL案例分享
立即下载