这篇文章主要介绍sql语言和pl/sql语言的区别和使用。
SQL语言和PL/SQL语言和SQL语言区别
标准SQL语言是一种通用行语言,它可以在任何数据库管理系统运行(常见的数据库管理系统有 微软的sql server、甲骨文的oracle、以及开源的Mysql)。标准的sql语言不支持复杂的条件判断或者循环语句,所以称不上是一门编程语言。但是pl/sql语言补充了这块短板,支持IF .. THEN .. ELSE
和FOR .. LOOP
等语句,扩展了标准sql语言。
在Oracle数据库中可以使用SQL和PL/SQL语言,PL/SQL语言只能运行在Oracle数据库中。
PL/SQL语言的基础使用
PL/SQL写出来的语句称为块(Block),因为任何PL/SQL语句都要写在 BEGIN
开头END
结尾的块中。PL/SQL块的结构包含四部分(PL/SQL大小写不敏感)
- 申明部分 Declare (可选)
- 程序执行开始 Begin(必需)
- 程序异常处理部分 Exception(可选)
- 程序执行结束End;(必需)
DECLARE
v_variable number;
BEGIN
statement1; --statement就是一些查询或插入语句
statement2;
END;
举个栗子,想要从emp表查询张三的薪水(salary),并从控制台输出,代码如下
DECLARE
v_salary number; 声明变量v_salary
BEGIN
select salary into v_salary
from emp
where ename = '张三'; --把薪水查询出来插入到本地变量v_salary
dbms_output.put_line(v_salary); --控制台输出变量v_salary
END;
PL/SQL块嵌套
一个PL/SQL块可以嵌套一个或多个块,例如
BEGIN --父块
BEGIN --子块
statement1;
END;
statement2;
END;
PL/SQL过程
PL/SQL过程是PL/SQL块的集合,我们把一些语句写在一起,然后把这些语句命一个名称。相当于把所有语句写进一个文件,然后为这个文件命名,当我们允许这个文件的时候,就字段运行文件里面的程序,而不用逐条运行每一条语句。
举个栗子,创建一个名为greetings的过程,运行它会输出"Hello World".
- 首先创建过程
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
- 然后调用过程
BEGIN
greetings; --调用过程
END;
PL/SQL函数
函数与过程类似,也是程序块的集合,但是函数必须返回值。例如建立一个做加法的函数,调用它可以返回 5+3
的结果,代码如下
- 创建函数
CREATE OR REPLACE FUNCTION add
RETURN number IS
total number := 0; --定义一个名为total的变量
BEGIN
total = 5+3;
RETURN a;
END;
- 调用函数
DECLARE
v_total number;
BEGIN
v_total := add; --调用函数,将结果返回v_total
END;
PL/SQL包
包是过程或者函数的集合,按照上文,把过程和函数比作文件,那么包就是文件夹,可以把一个或多个过程或函数放进pl/sql包里.包分为包头和包体部分。
- 创建包头(包名称为make_greetings)
CREATE OR REPLACE PACKAGE make_greetings AS
PROCEDURE say_hi;
PROCEDURE say_hello;
END make_greetings;
- 创建包体
CREATE OR REPLACE PACKAGE BODY make_greetings AS
PROCEDURE say_hi IS --名为say_hi的过程
BEGIN
dbms_output.put_line('Hi World!');
END say_hi;
PROCEDURE say_hello IS --名为say_hello的过程
BEGIN
dbms_output.put_line('Hello World!');
END say_hello;
END make_greetings;
- 调用包里面的过程
调用格式为包名
.过程名
,中间用小数点(.)隔开。
BEGIN
make_greetings.say_hi;
make_greetings.say_hello;
END;