2.PL/SQL——PL/SQL概述及其基本结构

一、什么是PL/SQL

PL/SQL是对SQL语言的扩展。

SQL语言是一种非过程性语言,即用户只需要告诉计算机做什么,而不需要理解计算机是怎么做的。比如用户要查询一张表里的某一列数据,只需要输入:selectCOLUNM_NAME from TABLE_NAME where CONDITION;就可以了,而不需要了解计算机是如何查询的。这既是优点也是缺点,优点就是该语言非常容易学习,缺点则是缺乏过程控制,限制了其功能,比如无法进行if...else的条件判断,也无法进行for循环操作。

基于SQL语言的局限性,于是诞生了PL/SQL。PL/SQL语言提供了条件判断、循环等等普通程序语言具备的功能。SQL语言是一种标准语言,如Oracle、MySQL、SQL_Server等等都支持,而PL/SQL则是Oracle公司专有的,它将过程控制和SQL语言无缝结合在一起,从而加强了SQL语言的功能。

二、PL/SQL的功能

PL/SQL的功能主要有:

1. PL/SQL提供了块结构,从而实现了模块化设计。任何一种程序语言都提供了函数、过程等基本结构,而函数过程都是将一个大的程序模块化,使得程序更容易开发和维护,PL/SQL也不例外。

2. PL/SQL提供了一些过程化的结构:

A. 变量(Variables)、常量(Constants)以及多种数据类型;

B. 提供了条件分支判断和循环结构;

C. 提供了一次编译,多次运行的单元。

三、PL/SQL的执行机制

PL/SQL语句在执行时,会分成两个部分,SQL语言部分由Oracle数据库内核中的SQL引擎来执行;PL/SQL的块则会由PL/SQL引擎来执行。

SQL引擎始终是位于Oracle数据库里面的,PL/SQL引擎则可以位于Oracle数据库内部,也可以独立于Oracle数据库而存在。独立于Oracle数据库存在的PL/SQL引擎多为一些数据库开发工具所提供,在客户端执行,而不是在服务端执行。

四、PL/SQL的优点

PL/SQL的优点主要有:

1. 在SQL语言中集成了一些过程控制;

2. 提高了性能,

如果单纯的使用SQL语言,那么每执行一条SQL语句,就需要将结果返回到客户端,由客户端根据返回值进行分支控制,然后再执行下一条SQL语句,这个过程会产生大量的I/O操作。

与之对应的,使用PL/SQL语言,可以由客户端将要查询的业务代码打包成一个整体,一次性发给Oracle数据库,甚至很多业务逻辑语句已经集成在Oracle数据库的内核里面了,客户端只需要调用一下即可。数据库会在服务端完成所有的操作,再一次性将结果返回给客户端,从而减少了网络数据的传输。

3.支持模块化编程;

4. Oracle的很多开发工具都支持PL/SQL语言的开发;

5. 可移植性(主要是在Oracle数据库之间进行移植,跨数据库,如MySQL和Oracle之间的移植会比较困难)

6. 支持异常处理。

五、PL/SQL的块结构

PL/SQL语言的基本单元就是块,块主要分为以下四个部分:

DECLARE(optional) ——声明部分

该部分主要定义以下内容:变量(Variables),常量(Constant),指针(cursor),用户自定义的异常(User-definedexceptions)等等。

BEGINmandatory)——业务逻辑部分

该部分主要存放业务逻辑:

SQL语句

PL/SQL语句

EXCEPTION(optional)——异常处理部分

该部分主要进行异常的处理

END;mandatory)——结束部分

注意,BEGIN 和 END这两个部分是必须的,而DECLARE和EXCEPTION这两个部分是可选的,且只在END最后有个分号,其他的地方都没有

六、块的种类

PL/SQL的块主要有以下三种:

A. 匿名块(Anonymous

匿名块是指没有起名的块,它不是存储在Oracle数据库里的,它一旦被执行过就失效了,不能重复使用;它主要用于写一些测试和临时使用的语句,其结构如下:

[DECLARE]                          

                      BEGIN

                        --statements                                    

                     [EXCEPTION]                     

                     END;

B. 过程块(Procedure

过程块需要起名字,其中PROCEDURE部分相当于匿名块中的DECLARE部分。有名字的块(Procedure和Function)可以存储在数据库中反复调用,用在比较正式的环境下,其结构如下:

PROCEDURE name

                      IS                           

BEGIN

                        --statements                                    

                      [EXCEPTION]                     

                      END;

C. 函数块(Function)                             

函数块也有名字,它和过程块的区别在于它一定要返回数据,其结构如下:

FUNCTION name

RETURN datatype

                       IS

BEGIN

                         --statements

                       RETURN value;

                       [EXCEPTION]                     

                       END;

七、PL/SQL的程序构建

PL/SQL的程序可以构建在客户端,也可以构建在服务端,构建在服务端的情况更常见,因为如果构建在客户端,还需要使用Oracle提供的额外开发工具。

在客户端构建的PL/SQL程序主要内容有:匿名块、过程、函数、包(包是函数和过程的整合)、触发器和一些其他类型的元素;

在服务端构建的PL/SQL程序主要内容有:匿名块、存储过程和函数、包、触发器和一些其他类型的元素。

2.PL/SQL——PL/SQL概述及其基本结构

时间: 2024-10-20 07:59:41

2.PL/SQL——PL/SQL概述及其基本结构的相关文章

SQL Tuning 基础概述01 - autotrace的设定

1.autotrace的设定 SQL> set autotrace Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] set autot on --打开autotrace,之后执行的sql,会显示sql执行结果.执行计划.统计信息 set autot on exp --会显示sql执行结果.执行计划 set autot on stat --会显示sql执行结果.统计信息 set autot tra

MSSQL之一 数据库系统简介 与SQL Server 2008概述

前   言 SQL的全称是结构化查询语言(Structured Query Language),它是关系数据库中最常用的语言.SQL不仅可以管理数据库中的数据,而且可以管理关系数据库本身.为了避免各数据库产品之间的SQL语法不兼容,因此由ANSI(American National Standard Institute,美国国家标准局)制定SQL-92标准,目前,大部分DBMS产品都支持该标准. 本课程的目标是使学生掌握结构化查询语言(SQL),具有查询和管理数据库的能力. 本书主要的读者对象

SQL Tuning 基础概述10

在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描,单块读,有序INDEX RANGE SCAN:索引的范围扫描INDEX FAST FULL SCAN:索引的快速全扫描,多块读,无序INDEX FULL SCAN(MIN/MAX):针对MAX(),MIN()函数的查询INDEX SKIP SCAN:查询条件没有用到组合索引的第一列,而组合索引的第一列重复度

转://使用showplan.sql分析sql Performance

在HelloDBA网站找到一个分析sql性能的工具-showplan,记录一下 showplan.sql下载路径:http://www.HelloDBA.com/Download/showplan.zip 使用方式就是调用该工具,传入SQL_ID作为参数. SQL> @/dmp/showplan.sql 26xj87b2f8g6u ---showplan.sql -- ################################################################

SQL Server :理解数据记录结构

在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下. 数据记录存储我们具体的数据,换句话说,它存在堆表里,或者存在聚集索引的叶子节点.数据记录结构是为了让SQL Server更高效的管理数据.我们来看下数据记录结构示意图: 上图中蓝色部分是所有数据记录部分,绿色部分是表结构里取决于定长/变长列的数据记录部分. 行头系统数据: 用做状态位1的第1字节(8位)是用来定义记录的属性: 第0位:版本信息

获得sql server的table的表结构 -- 转到word中

SQL语句: select syscolumns.name,systypes.name,syscolumns.length from syscolumns join sysobjects on syscolumns.id=sysobjects.id and sysobjects.xtype='U' join systypes on systypes.xtype=syscolumns.xtype where sysobjects.name='master_location' order by sy

Hibernate SQL实际sql语句监控- p6spy+hibernate+proxool 设置

由于ORM工具的缘故,我们调试程序的时候远没有直接在程序里直接写个string的SQL简单,想当年查个sql是有多么的幸福,一行sql = "select * from ..."找找就行了, 现在用了hibernate, 就算在JPA中开了show_sql=true, 打出来的还是一串 "name = ? and id = ? " 好在找到一个工具, p6spy, 作为真正JDBC的一个代理, 截获了所有sql, 让我们看到一个真实sql的机会. 先下载,以下配置默

【SQL】sql版Split函数。用于拆分字符串为单列表格

原文:[SQL]sql版Split函数.用于拆分字符串为单列表格 功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移除空格子串和重复项.市面上类似的函数不算少,但大多都是在循环中对原串进行改动,我感觉这样不好,虽然不知道sql的字符串是不是像.net的一样具有不可变性,但感觉尽量不要去动原串最好,万一sql的字串也不可变,那变一次就要产生一份,尤其是每圈循环都在变,内存消耗让人心疼,所以才有重新造个轮子的想

SQL语句:关于复制表结构和内容到另一张表中的SQL语句

1.复制新表结构及数据到新表create table 新表 select * from 旧表 2.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 3.复制旧表的数据到新表(假设两个表结构一样) insert into 新表 select * from 旧表 4.复制旧表的数据到新表(假设两个表结构不一样) insert into 新表(字段1,字段2,......) select 字段1, 字段2,... from 旧表 SQL语句:关于