PL/SQL 简介
PL/SQL 是一种块结构语言,它使开发人员能够将 SQL 的力量与过程语句结合起来。一个块的所有语句都同时传递给 oracle 引擎,这提高了处理速度并减少了流量。
SQL 的缺点:
- SQL 没有为程序员提供条件检查、循环和分支的技术。
- SQL 语句一次传递给一个 Oracle 引擎,这会增加流量并降低速度。
- 在数据操作过程中,SQL 没有错误检查功能。
PL/SQL 的特点:
- PL/SQL 基本上是一种过程语言,它提供了决策、迭代的功能以及过程编程语言的更多特性。
- PL/SQL 可以使用一个命令在一个块中执行多个查询。
- 人们可以创建一个 PL/SQL 单元,如过程、函数、包、触发器和类型,它们存储在数据库中供应用程序重用。
- PL/SQL 提供了一个功能来处理发生在 PL/SQL 块中的异常,称为异常处理块。
- 用 PL/SQL 编写的应用程序可以移植到运行 Oracle 的计算机硬件或操作系统中。
- 提供广泛的错误检查。
SQL 和 PL/SQL 的区别:
| SQL | pl/SQL | | SQL 是用于执行 DML 和 DDL 操作的单个查询。 | PL/SQL 是用于编写整个程序块/过程/函数等的代码块。 | | 它是声明性的,定义了需要做什么,而不是事情需要如何做。 | PL/SQL 是程序性的,它定义了需要如何完成的事情。 | | 作为单个语句执行。 | 整体执行。 | | 主要用于操纵数据。 | 主要用于创建应用程序。 | | 其中不能包含 PL/SQL 代码。 | 它是 SQL 的扩展,所以它里面可以包含 SQL。 |
PL/SQL 块的结构:
PL/SQL 通过添加过程语言中的构造来扩展 SQL,从而产生了比 SQL 更强大的结构语言。PL/SQL 中的基本单位是块。所有的 PL/SQL 程序都是由块组成的,这些块可以相互嵌套。
通常,每个块在程序中执行一个逻辑动作。块具有以下结构:
DECLARE
declaration statements;
BEGIN
executable statements
EXCEPTIONS
exception handling statements
END;
- Declare 部分以 DECLARE 关键字开始,在该关键字中可以声明变量、常数、记录作为游标,临时存储数据。它基本上由 PL/SQL 标识符的定义组成。这部分代码是可选的。
- 执行部分以 BEGIN 开始,以 END 关键字结束。这是一个强制性的部分,这里的程序逻辑是用来执行任何任务的,比如循环和条件语句。它支持所有 DML 命令、 DDL 命令以及 SQL*PLUS 内置功能。
- 异常部分以异常关键字开始。此部分是可选的,它包含在运行时出错时执行的语句。任何异常都可以在本节中处理。
PL/SQL 标识符
有几个 PL/SQL 标识符,如变量、常数、过程、游标、触发器等。
-
变量 : 像其他几种编程语言一样,PL/SQL 中的变量在使用之前必须声明。它们也应该有有效的名称和数据类型。
变量声明的语法:
```sql variable_name datatype [NOT NULL := value ];
```
演示如何在 PL/SQL 中声明变量的示例:
```sql SQL> SET SERVEROUTPUT ON;
SQL> DECLARE var1 INTEGER; var2 REAL; var3 varchar2(20) ;
BEGIN null; END; / ```
输出:
```sql PL/SQL procedure successfully completed.
```
解说:
- 设置服务器输出开启 :用于显示 dbms_output 使用的缓冲区。
- var1 INTEGER : 是变量的声明,命名为 var1 ,为整数类型。还有许多其他数据类型可以使用,如浮点、int、real、smallint、long 等。它还支持在 SQL 中使用的变量,如 NUMBER(prec,scale),varchar,varchar2 等。
- PL/SQL 程序成功完成。 : 代码编译执行成功时显示。
- END 后斜线(/); :斜线(/)告诉 SQL*Plus 执行该块。
1.1)初始化变量: 变量也可以像其他编程语言一样初始化。让我们看一个同样的例子:
```sql SQL> SET SERVEROUTPUT ON; SQL> DECLARE var1 INTEGER := 2 ; var3 varchar2(20) := 'I Love GeeksForGeeks' ;
BEGIN null;
END; / ```
输出:
```sql PL/SQL procedure successfully completed.
```
解说:
- 赋值运算符(:=) :用于给变量赋值。
- 显示输出 : 输出通过使用 DBMS_OUTPUT 来显示,DBMS _ Output 是一个内置的包,使用户能够显示输出、调试信息以及发送来自 PL/SQL 块、子程序、包和触发器的消息。
让我们看一个例子,看看如何使用 PL/SQL 显示消息:
```sql SQL> SET SERVEROUTPUT ON; SQL> DECLARE var varchar2(40) := 'I love GeeksForGeeks' ;
BEGIN dbms_output.put_line(var);
END; / ```
输出:
```sql I love GeeksForGeeks
PL/SQL procedure successfully completed.
```
解说:
- dbms_output.put_line :此命令用于将 PL/SQL 输出导向屏幕。
-
使用注释 : 像许多其他编程语言一样,在 PL/SQL 中,注释也可以放在代码中,但对代码没有影响。在 PL/SQL 中创建注释有两种语法:
-
单行注释: 要创建单行注释,请使用符号––。
- 多行注释: 要创建跨越多行的注释,请使用符号 / 和 / 。
演示如何在 PL/SQL 中创建注释的示例:
```sql SQL> SET SERVEROUTPUT ON; SQL> DECLARE
-- I am a comment, so i will be ignored. var varchar2(40) := 'I love GeeksForGeeks' ;
BEGIN dbms_output.put_line(var);
END; / ```
输出:
```sql I love GeeksForGeeks
PL/SQL procedure successfully completed.
```
-
从用户处获取输入 : 就像在其他编程语言中一样,在 PL/SQL 中,我们也可以从用户处获取输入,并将其存储在变量中。让我们看一个例子来展示如何在 PL/SQL 中从用户那里获取输入:
```sql SQL> SET SERVEROUTPUT ON;
SQL> DECLARE
-- taking input for variable a a number := &a;
-- taking input for variable b b varchar2(30) := &b;
BEGIN null;
END; / ```
输出:
```sql Enter value for a: 24 old 2: a number := &a; new 2: a number := 24; Enter value for b: 'GeeksForGeeks' old 3: b varchar2(30) := &b; new 3: b varchar2(30) := 'GeeksForGeeks';
PL/SQL procedure successfully completed.
```
-
( *)让我们看一个 PL/SQL 上的例子,在一个代码块中演示所有上述概念。*
```sql --PL/SQL code to print sum of two numbers taken from the user. SQL> SET SERVEROUTPUT ON;
SQL> DECLARE
-- taking input for variable a a integer := &a ;
-- taking input for variable b b integer := &b ; c integer ;
BEGIN c := a + b ; dbms_output.put_line('Sum of '||a||' and '||b||' is = '||c);
END; / ```
```sql Enter value for a: 2 Enter value for b: 3
Sum of 2 and 3 is = 5
PL/SQL procedure successfully completed.
```
PL/SQL 执行环境:
PL/SQL 引擎驻留在 Oracle 引擎中。Oracle 引擎不仅可以处理单个 SQL 语句,还可以处理多个语句的块。如果将任意数量的 SQL 语句捆绑在一个 PL/SQL 块中,只需要调用一次 Oracle 引擎就可以执行这些语句。
版权属于:月萌API www.moonapi.com,转载请注明出处