Oracle PL/SQL 第二章--块结构与标识符

简介: Oracle PL/SQL 第二章--块结构与标识符

Oracle PL/SQL 第二章--块结构与标识符

目录

Oracle PL/SQL 第二章--块结构与标识符

1、PL/SQL块结构的基本单元框架

2、PL/SQL 的块分类

(1)匿名块(Anonymous Blocks)

(2)命名块(Named Block)

(3)子程序(Subprogram) —— 存储过程(Procedure)

(4)子程序(Subprogram) —— 函数 (Function)

(5)触发器(Trigger)

(6)程序包(Package)

3、PL/SQL的标识符

1、PL/SQL块结构的基本单元框架

DECLARE
    --声明部分:这是一个可选部分,主要是声明变量、常量、游标、自定义记录类型,以及局部的存储过程和函数
BEGIN
    --执行部分:这是一个强制性部分。它由程序的可执行PL/SQL语句组成。
    --它应该有至少一个可执行代码行,它可以只是一个NULL命令,表示不执行任何操作。
EXCEPTION
    --异常处理部分:这是一个可选部分,主要是错误处理 
END;

提示:(1)执行部分不能省略。

(2)EXCEPTION 必须写在 BEGIN ... END 之间,否则程序会报错。

2、PL/SQL 的块分类

1、匿名块(Anonymous Blocks): 是能够动态地创建和执行过程代码的PL/SQL结构,而不需要以持久化的方式将代码作为数据库对象储存在系统目录中。动态构造,只能执行一次,可调用其它程序,但不能被其它程序调用。

2、命名块(Named Block): 是带有名称的匿名块,这个名称就是标签。

3、子程序(Subprogram): 存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其它程序中调用它们。

4、触发器(Trigger): 当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

5、程序包(package): 存储在数据库中的一组子程序、变量定义。在包中的子程序可以被其它程序包或子程序调用。但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序。

简单案例说明:

(1)匿名块(Anonymous Blocks)

--匿名块
Declare
    varName VARCHAR2(10);
Begin
   Select Name Into varName From dual;
   DBMS_OUTPUT.PUT_LINE(varName);
Exception 
   When NO_DATA_FOUND Then
   DBMS_OUTPUT.PUT_LINE('未查到到任何数据');
End;

(2)命名块(Named Block)

--命名块
--<<OUTER>>
Declare
    varName VARCHAR2(10);
Begin
   SELECT Name INTO varName FROM dual;
   DBMS_OUTPUT.PUT_LINE(varName);
Exception 
   WHEN NO_DATA_FOUND THEN
   DBMS_OUTPUT.PUT_LINE('未查到到任何数据');
End;--<<OUTER>>

(3)子程序(Subprogram) —— 存储过程(Procedure)

--子程序  存储过程
Create Or Replace Procedure test_procedure (flag out VARCHAR2) as 
    varMsg VARCHAR2(100);
Begin
    varMsg := 'I am a subroutine stored procedure.';
    DBMS_OUTPUT.PUT_LINE(varMsg);
    flag := 'The stored procedure call was successful.';
Exception
    WHEN OTHERS THEN
    flag := 'The stored procedure call was failure.';
End;

(4)子程序(Subprogram) —— 函数 (Function)

--子程序 函数
Create Or Replace Function test_function Return Number Is 
    varRecordNum Number(10) := 0;
Begin
    Select count(*) Into varRecordNum From Scott.EMP;
    DBMS_OUTPUT.PUT_LINE('总的记录条数为:' || varRecordNum);
    Return varRecordNum;
End;

(5)触发器(Trigger)

--触发器
CREATE OR REPLACE TRIGGER test_trigger 
BEFORE DELETE OR INSERT OR UPDATE ON customers 
FOR EACH ROW 
WHEN (NEW.ID > 0) 
DECLARE 
   sal_diff number; 
BEGIN 
   sal_diff := :NEW.salary  - :OLD.salary; 
   dbms_output.put_line('Old salary: ' || :OLD.salary); 
   dbms_output.put_line('New salary: ' || :NEW.salary); 
   dbms_output.put_line('Salary difference: ' || sal_diff); 
END;

(6)程序包(Package)

-- 包(pakage)和包体(package body)
-- 首先创建一个包含字段comm的emp表,再创建下面的包和包体
create or replace package test_package
is
    -- 声明全局变量:默认奖金数额
    g_comm number:=100;
    -- 声明存储过程:用于重置奖金数额
    procedure proc_reset_comm(p_comm in number);
    -- 声明函数:用于求所有员工中最高工资
    function func_maxsal_emp return number;
end test_package;
--==================================================
--包体(package body)
create or replace package body test_package
is
    -- 实现存储过程
    procedure proc_reset_comm(p_comm in number)
    is
    begin
        if nvl(p_comm,0)>g_comm then
            g_comm:=p_comm;
        end if;
        dbms_output.put_line(g_comm);
    end proc_reset_comm;
    ------------------------------------
    -- 实现函数
    function func_maxsal_emp return number
    is
    v_maxsal emp.sal%type;
    begin
        select max(sal) into v_maxsal from a_emp;
        return v_maxsal;
    end func_maxsal_emp;
end;

3、PL/SQL的标识符

PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同。要求和限制有:

  • 标识符名称不能超过30字符
  • 第一个字符必须为字母
  • 不区分大小写
  • 不能用 ‘-’ (减号)
  • 不能是SQL保留字

提示:一般不要把声明的变量名称和数据库表中字段完全一样,如果这样可能得不到正确的结果。

例如:下面的例子将会删除所有的记录,而不是‘Bob’这一条记录。

Declare 
    ename varchar2(20) := 'Bob';
Begin
    delete from scott.emp where ename = ename;
End;

变量名称在PL/SQL中有特别的规则,建议在系统的设计阶段就要求所有编程人员共同遵守一定的要求,使得整个系统的文档在规范上达到要求。

相关文章
|
2月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
213 8
|
7月前
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
262 6
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
275 93
|
19天前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
110 0
|
4月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
4月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
183 11

推荐镜像

更多