PL/SQL块

作者: baobaodz | 来源:发表于2018-03-25 20:55 被阅读35次
    1.简介

    Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询与Oracle自身过程控制为一体的强大语言,PL/SQL不但支持更多的数据类型,拥有自身的变量声明、赋值语句,而且还有条件、循环等流程控制语句。过程控制结构与SQL数据处理能力无缝的结合形成了强大的编程语言,可以创建过程和函数以及程序包。

    PL/SQL是一种块结构的语言,它将一组语句放在一个块中,一次性发送给服务器,PL/SQL引擎分析收到PL/SQL语句块中的内容,把其中的过程控制语句由PL/SQL引擎自身去执行,把PL/SQL块中的SQL语句交给服务器的SQL语句执行器执行。如图所示:


    image.png
    2.语法结构

    PL/SQL 块是构成 PL/SQL 程序的基本单元
    将逻辑上相关的声明和语句组合在一起
    PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分

    [DECLARE 
    declarations] --声明部分
    BEGIN
    executable statements--可执行部分
    [EXCEPTION 
    handlers]--异常处理部分
    END;
    

    PL/SQL块可以分为三类:
    1.无名块或匿名块(anonymous):动态构造,只能执行一次,可调用其它程序,但不能被其它程序调用。
    2.命名块(named):是带有名称的匿名块,这个名称就是标签。
    3.子程序(subprogram):存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其它程序中调用它们。
    4.触发器(Trigger):当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。
    5.程序包(package):存储在数据库中的一组子程序、变量定义。在包中的子程序可以被其它程序包或子程序调用。但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序。
    例如

    DECLARE
    bid int := '&id';  ①
    --v_isbn iweb_tbl_book.isbn%TYPE;②
    --v_title iweb_tbl_book.title%TYPE;③
    --v_author iweb_tbl_book.author%TYPE;
    v_book iweb_tbl_book%ROWTYPE;④
    BEGIN
    select * into v_book 
    from iweb_tbl_book
    where id = bid;
    --输出结果
    dbms_output.put_line('isbn:' || v_book.isbn);⑤
    dbms_output.put_line('title:' || v_book.title);⑥
    dbms_output.put_line('author:'|| v_book.author);
    dbms_output.put_line('pagenum:'|| v_book.pagenum);
    END;
    

    --①'&id'表示从外部录入数据ID,变量声明赋值用 :=
    也可以使用select…into语句对变量sname赋值,要求查询的结果必须是一行,不能是多行或者没有记录

    SELECT ename INTO sname FROM emp WHERE empno=7934;
    

    --②%iweb_tbl_book.title%TYPE指向表中书名列的属性,好处是不需要自己再赋予属性了
    --③给变量命名时一般遵循规则v_name,给常量命名时遵循c_name
    --④%ROWTYPE - 提供表示表中一行的记录类型
    --⑤输出结果dbms_output.put_line()
    --⑥ || 用来分隔变量和字符串

    相关文章

      网友评论

        本文标题:PL/SQL块

        本文链接:https://www.haomeiwen.com/subject/uodkcftx.html