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月前
|
Oracle 关系型数据库 BI
ORACLE Apex: EBS多组织结构 理解与配置
【8月更文挑战第11天】在Oracle Apex中理解和配置与EBS多组织结构相关内容需掌握:1) EBS多组织结构概念及组成部分,如法律实体、业务单位与库存组织;2) Oracle Apex与EBS集成的目的与方式,包括提供友好界面及自定义业务流程;3) 在Apex中配置多组织结构应用,涉及数据访问控制、页面报表设计及业务流程集成。整体而言,需精通EBS架构与Apex开发技术,以实现高效灵活的企业解决方案。
|
24天前
|
SQL 安全 Java
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
|
2月前
|
SQL 关系型数据库 数据处理
SQL结构
【7月更文挑战第28天】SQL结构
18 4
|
2月前
|
SQL Oracle 关系型数据库
|
2月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
138 3
|
2月前
|
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等。
84 0
|
3月前
|
SQL 关系型数据库 MySQL
mysqldiff - Golang 针对 MySQL 数据库表结构的差异 SQL 工具
Golang 针对 MySQL 数据库表结构的差异 SQL 工具。https://github.com/camry/mysqldiff
81 7
|
3月前
|
SQL Oracle 关系型数据库
一些非常有用的Oracle SQL
一些非常有用的Oracle SQL
38 4
|
3月前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
60 0
|
3月前
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
158 0

推荐镜像

更多