`
jguangyou
  • 浏览: 375629 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PL/SQL概述(一)

阅读更多

       PL/SQL是Procedure Language/Structuer Query Language 的英文缩写,是ORACLE对标准的SQL的扩展,全面支持SQL的数据库操作、事务控制等。PL/SQL完全支持SQL数据类型,减少了在应用程序和数据库之间的转换数据的操作。在PL/SQL程序中,PL/SQL程序块是基本程序单元,编写PL/SQL程序实际上就是编写PL/SQL块。要完成相对简单的功能,可能只需要写编写一个PL/SQL块;如果要实现复杂的应用功能,那么可能需要在一个PL/SQL块中嵌套其他PL/SQL块。

      为了编写正确、高效的PL/SQL块,PL/SQL的编写应该遵从特定的编写规则,否则会导致编译错误或运行错误。应该遵循的规则(参考其他资料)。

      PL/SQL块结构

      PL/SQL块由三个部分组成:定义部分、执行部分和例外处理部分。其中,定义部分用于定义常量、变量、游标、例外、复杂数据类型等;执行部分用户实现应用模块功能,该部分包含要执行的PL/SQL语句和SQL语句;例外处理部分用于处理执行部分可能出现的运行错误。PL/SQL基本结构:

 

DECLARE
/*
* 定义部分--定义常量、变量等
*/
BEGIN
/*
*执行部分--PL/SQL语句和SQL语句
*/
EXCEPTION
/*
*异常处理部分--处理运行错误
*/
END;(END后一定要有分号哦!!)

 

    其中,DECLARE部分是可选的;BEGIN是必须的;异常处理部分也是课选的;END部分是块的结束标记。

    示例一:只含后执行部分。

SET SERVEROUTPUT ON/*如果想在SQL*plus中输出,必须设置这个参数*/
BEGIN
     dbms_output.put_line('Hello,everyone');
END;
/

 当执行PL/SQL块时,会输出消息。其中dbms_output时oracle提供的系统包,put_line时该包所包含的过程,用于输出字符串信息。当要在sqlplus窗口中执行时,在最后需要“/”才能执行。

示例二:包含定义部分和执行部分

DECLARE
    v_ename VARCHAR2(5);
BEGIN
    SELECT ename INTO v_ename FROM emp WHERE empno=3733;
    dbms_output.put_line('雇员姓名'||v_ename);
END;
/

 

   PL/SQL块分类

   主要包括匿名块、命名块和子程序,其中子程序又包括过程、函数、包和触发器。

  1. 匿名块:就是没有名字的PL/SQL块,就是上面定义的块。
  2. 命名块:是指具有特定名字的PL/SQL块。命名块和匿名块非常相似,只不过是在块前加了一个<<>> 符号。当使用嵌套块是,为了区分可以使用命名块。例如:
    <<outer>>
    DECLEAR
         v_deptno NUMBER(2);
    BEGIN
        <<inner>>
         BEGIN
            SELECT deptno INTO v_deptno FROM emp WHERE ename='abc';
         END;
         SELECT dname INTO v_dname FROM dept where deptno='123';
    END;
     
  3. 子程序:子程序包括过程、函数、包和触发器

            (1)过程:也叫存储过程,是一组为了完成特定功能的SQL语句集,它大大提高了SQL语句的功能和灵活性。存储 过程经过编译后存储在数据库中,所以执行存储过程比执行SQL语句更有效率。创建存储过程使用CREATE PROCEDURE语句,语法格式:CREATE[OR REPLACE] PROCEDURE procedure_name

                        [(parameter)[IN]|OUT|IN OUT]data_type,[……]]

                        IS|AS

                            [declareation_section;]

                       BEGIN

                            procedure_body;

                       END [procedure_name];

             执行存储过程方法:

                  1.使用CALL--CALL procedure_name([parameter[, ...]]);

                  2.使用EXEC[UTE]--EXEC[UTE] procedure_name[(parameter[, ...])];

          示例一:没有输出输出参数

/*创建*/
CRATE OR REPLACE PROCEDURE update_emp AS 
BEGIN
     UPDATE emp SET ename='abcd' WHERE empno=7933;
END update_emp;  
/*调用*/
1.CALL update_emp();
2.EXEC update_emp;

        示例二:只有IN参数

/*创建*/
CREATE PROCEDURE update_emp2
          (emp_num IN NUMBER,emp_name IN VARCHAR2) AS
BEGIN
     UPDATE emp SET ename=emp_name 
     WHERE empno=emp_num;
END update_emp2;
 /*不指定调用*/
EXEC update_emp2(7933,'abcd');
或者
CALL update_emp2(7933,'abcd');
/*指定参数名调用*/
EXEC update_emp2(emp_num=>7933,emp_name=>'abcd');
或者
CALL update_emp2(emp_num=>7933,emp_name=>'abcd');

       示例三:带有OUT参数

/*创建*/
CREATE PROCEDURE select_emp
(emp_num IN NUMBER,emp_name OUT VARCHAR2) AS 
BEGIN
     SELECT ename INTO emp_name 
     FROM emp WHERE empno=emp_num;
END select_emp;
/*执行*/
VARIABLE employee_name VARCHAR2(10);
EXEC select_emp(7933,:employee_name);
/*查看结果*/
PRINT employee_name;

    说明:OUT参数是指输出参数,由存储过程中的语句为其赋值,并返回给用户。使用这种参数,必须在参数后面添加OUT关键字。调用存储过程时,如果要显示该过程中OUT参数返回值,还需要事先使用VARIABLE语句声明对应的变量棘手返回值,并且在调用过程时绑定该变量形式如下:

     VARIABLE variable_name data_type;

     EXEC procedure_name(:variable_name);注意:在绑定时需要在变量名称前加“:”;

    示例四:带有IN OUT 参数…………

     说明:IN OUT 参数同时拥有IN和OUT参数特性,它既可以棘手用户的传值,也允许在过程体中修改,并可以将值返回。使用这种模式的参数需要在参数后面加IN OUT关键字。不过,IN OUT 参数不接收常量值,只能使用变量为其赋值。

使用EXEC命令可以为变量赋值,并且变量名前也需要加“:”。

       (2)函数:函数用于返回特定数据。如果在应用程序中经常需要通过执行SQL语句返回特定数据,那么可以基于这些操作建立特定函数。函数和过程的结构很相似,他们都可以接收输入值并向应用程序返回值,区别在于,过程用来完成一项任务,可能不翻悔值,也可能返回多个值,过程的调用时一条PL/SQL语句;函数包含RETURN子句,用来进行数据操作,并返回一个单独的函数值,函数的调用只能在一个表达式中。创建语法:

   CREATE [OR REPLACE] FUNCTION function_name

    [(paramater[IN|OUT|IN OUT] date_type)]

    RETURN data_type

   IS|AS

    [declaration_section;]

   BEGIN

      function_body;

   END [function_name];

   (3)程序包:包主要是为了实现程序的模块化,程序包可以将相关的存储过程、函数、变量、常量和游标等PL/SQL程序组合到一起,通过这种方式可以构建程序人员重用的代码库。

    (4)触发器:是一种特殊的存储过程,它在发生某种数据库事件时由ORCALE系统自动出发。触发器通常用户加强数据的完整性约束和业务规则等,对于表来说,触发器可以实现比check约束更为复杂的约束。

分享到:
评论

相关推荐

    Oracle PL/SQL程序设计(第5版)(上下册)

    ### Oracle PL/SQL程序设计(第5版)(上下册)知识点概述 #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL...

    Oracle数据库实用教程第三章 PL/SQL程序设计.pptx

    运行 PL/SQL 程序需要通过 Oracle 中的一个引擎来进行,引擎执行 PL/SQL 中的过程性语句,然后将 SQL 语句发送给数据库服务器来执行,再将结果返回给执行端。 PL/SQL 块结构由三个部分组成:声明部分、执行部分、...

    PL/SQL 程序设计

    PL/SQL 程序设计 本章主要重点:  PL/SQL概述  PL/SQL块结构  PL/SQL流程  运算符和表达式  游标  异常处理  数据库存储过程和函数  包  触发器

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    第1章 PL/SQL概述 3 第2章 创建并运行PL/SQL代码 21 第3章 语言基础 50 第2部分 PL/SQL程序结构 第4章 条件和顺序控制 77 第5章 用循环进行迭代处理 96 第6章 异常处理 118 第3部分 PL/SQL数据 第7章 使用数据 159 ...

    PL/SQL基础编程,实例自写

    #### 一、PL/SQL概述 PL/SQL,全称为Procedural Language for SQL,是Oracle数据库特有的高级程序设计语言。它结合了SQL的数据处理能力和传统编程语言的控制结构,使开发者能够在数据库环境中编写复杂的应用程序。...

    Oracle PL/SQL编程及最佳实践

    四、PL/SQL 概述 PL/SQL 是一种高级编程语言,用于开发 Oracle 数据库中的存储过程、函数和触发器。PL/SQL language 提供了强大的编程能力,可以实现复杂的业务逻辑,并且与 Oracle 数据库紧密集成。PL/SQL 程序...

    oracle pl/sql fundamentals

    1. **PL/SQL概述**:了解PL/SQL的基本概念,包括它的结构、块(DECLARE、BEGIN、END)以及如何在SQL*Plus或其他开发工具中执行PL/SQL程序。 2. **变量和数据类型**:深入学习PL/SQL中的变量声明,包括内置的数据...

    Oracle PL SQL程序设计 上 第五版(代码示例)

    第1章 pl/sql概述 3 第2章 创建并运行pl/sql代码 21 第3章 语言基础 50 第2部分 pl/sql程序结构 第4章 条件和顺序控制 77 第5章 用循环进行迭代处理 96 第6章 异常处理 118 第3部分 pl/...

    PL/SQL Developer 64 bit

    ### PL/SQL Developer 64位概述 #### 1. 什么是PL/SQL Developer? PL/SQL Developer是一款专为Oracle数据库设计的强大集成开发环境(IDE)。它主要面向数据库开发者、DBA(数据库管理员)以及测试人员等专业人士,...

    oracle sql and pl/sql

    1. **定义**:PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了 SQL 命令和过程式编程语句,使得开发人员能够编写更复杂的数据库应用程序。 2. **功能**: - 过程化代码执行:允许在数据库中执行...

    Oracle PL/SQL programming(5th Edition)

    《Oracle PL/SQL Programming》(第五版)是一本全面而深入的指南,旨在帮助读者掌握Oracle PL/SQL编程语言的核心技术和最佳实践。无论是对于初学者还是有经验的开发人员,这本书都是一个宝贵的资源。通过阅读本书,...

    PL/SQL存储过程编程

    6. **PL/SQL (Procedural Language for SQL)**: PL/SQL是一种过程化的SQL语言扩展,主要在Oracle数据库内部运行。与其他方法不同的是,PL/SQL程序直接存储在数据库中,并在数据库服务器上执行,这有助于提高性能并...

    PL/SQL Developer 8.0.4.1514注册码

    #### 一、PL/SQL Developer概述 PL/SQL Developer是一款专为Oracle数据库设计的强大开发工具,它支持PL/SQL语言的开发、调试与管理。该工具不仅能够帮助开发者高效地编写和维护PL/SQL代码,还提供了诸如代码格式化...

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    第1章 PL/SQL概述 3 第2章 创建并运行PL/SQL代码 21 第3章 语言基础 50 第2部分 PL/SQL程序结构 第4章 条件和顺序控制 77 第5章 用循环进行迭代处理 96 第6章 异常处理 118 第3部分 PL/SQL数据 第7章 使用数据 159 ...

    pl/sql语句基础

    #### 一、PL/SQL 概述 PL/SQL (Procedural Language for SQL) 是 Oracle 对标准 SQL 的扩展,由 Oracle 公司开发并整合进 Oracle 数据库和一系列 Oracle 工具中。自 Oracle 6 版本开始,PL/SQL 就作为一项核心功能...

    Oracle PL/SQL Training

    课程列表覆盖了PL/SQL的各个方面,第一天的章节包括:PL/SQL概述、创建和运行PL/SQL程序、PL/SQL基础、数据类型、特定特性、记录与集合、游标、控制结构以及动态SQL。这些章节将帮助你理解PL/SQL的基础语法和核心...

    Oracle PL_SQL Language Pocket Reference, 5th Edition.2015.pdf

    《Oracle PL/SQL 语言袖珍参考手册》(第五版)由三位专家Steven Feuerstein、Bill Pribyl和Chip Dawes共同编著,是一本专为Oracle PL/SQL语言用户设计的实用指南。本书覆盖了Oracle Database 12c版本,并包含了该...

Global site tag (gtag.js) - Google Analytics