sql与pl/sql的使用

这篇文章主要介绍sql语言和pl/sql语言的区别和使用。

SQL语言和PL/SQL语言和SQL语言区别

标准SQL语言是一种通用行语言,它可以在任何数据库管理系统运行(常见的数据库管理系统有 微软的sql server、甲骨文的oracle、以及开源的Mysql)。标准的sql语言不支持复杂的条件判断或者循环语句,所以称不上是一门编程语言。但是pl/sql语言补充了这块短板,支持IF .. THEN .. ELSEFOR .. 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; 

你可能感兴趣的:(sql与pl/sql的使用)