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中有特别的规则,建议在系统的设计阶段就要求所有编程人员共同遵守一定的要求,使得整个系统的文档在规范上达到要求。

相关文章
|
1月前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
34 2
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的物理存储结构
Oracle的物理存储结构包括数据文件、联机重做日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件。这些文件在硬盘上存储数据库的各种数据和日志信息,确保数据库的正常运行和故障恢复。视频讲解和详细说明见原文。
|
2月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
2月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
86 3
|
2月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
72 1
|
2月前
|
SQL Oracle 关系型数据库
SQL语句中的引号使用技巧:正确处理字符串与标识符
在编写SQL语句时,引号的使用是一个基础且重要的环节
|
4月前
|
Oracle 关系型数据库 BI
ORACLE Apex: EBS多组织结构 理解与配置
【8月更文挑战第11天】在Oracle Apex中理解和配置与EBS多组织结构相关内容需掌握:1) EBS多组织结构概念及组成部分,如法律实体、业务单位与库存组织;2) Oracle Apex与EBS集成的目的与方式,包括提供友好界面及自定义业务流程;3) 在Apex中配置多组织结构应用,涉及数据访问控制、页面报表设计及业务流程集成。整体而言,需精通EBS架构与Apex开发技术,以实现高效灵活的企业解决方案。
108 2
|
4月前
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
93 0
|
5月前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
134 0

推荐镜像

更多