PL/SQL介绍

一、PL/SQL简介

1、SQL、PL/SQL

结构化查询语言(SQL)是用来访问和操作关系型数据库的一种标准语言,使用SQL可以很方便地调用相应语句来取得结果,特点:非过程化,即不需要关注实现细节,比如我们查询中使用 order by排序,这个排序的过程我们无需关注.
但是,在某些情况下,SQL满足不了复杂的业务需求,而PL/SQL语言可以解决这一问题,PL/SQL语言是oracle公司在标准SQL语言基础上进行扩展而形成的一种可以直接在数据库上进行编程设计的语言,是一种过程化语言,PL/SQL完全可以像Java语言一样实现逻辑判断、条件循环、异常处理等逻辑.

2、PL/SQL特点

1)、支持SQL的所有数据类型,并在此基础上扩展了新的数据类型
2)、支持SQL的函数以及运算符
3)、支持事务控制和SQL数据操作命令
4)、PL/SQL可以存储在Oracle数据库中
5)、Oracle中有自己的DBMS包,可以处理数据的控制和定义命令

3、PL/SQL优势

1)、提高程序运行性能
标准SQL执行时,只能一条一条的向服务器发送,如果一个复杂逻辑需要几十条SQL语句,那么在这个过程中,应用程序会几十次连接数据库,这会浪费大量的资源在网络连接上.
如果使用PL/SQL语句,完全可以将这些SQL语句编写到一个PL/SQL块中,这样只需要连接一次数据库就可以把需要的参数传递过去,其它的将在Oracle内部完成,然后返回结果,大大节省了网络资源.


2)、提供模块化程序设计
比如保存数据时涉及到多张表,完全可以将这些操作放进一个程序块中,对外只需要提供调用方式、需要传入的参数,使用及其方便.

3)、可以使用逻辑控制程序结构
在PL/SQL中,我们可以利用逻辑控制语句完成复杂的功能,这些是普通SQL语句不支持的.

4)、良好的兼容性
PL/SQL在允许运行Oracle的任何平台都支持使用

5)、处理运行错误
使用PL/SQL提供的Exception,开发人员可以集中处理各种Oracle错误以及PL/SQL错误.

二、PL/SQL开发工具

1、SQL*PLUS

SQL*PLUS 是Oracle公司提供的一个工具程序,用于运行SQL语句、PL/SQL块,可以在命令行运行,也可以在windows窗口中运行.
使用前需要先连接上数据库,在命令行中连接命令如下:

sqlplus [username]/[password][@server]

username 是数据库用户名
password 是连接的口令
server 是用来指定主机的字符串

示例:
sqlplus scott/qqqaaa@orcl               以scott身份登陆
sqlplus sys/qqqaaa@orcl as sysdba       以DBA身份登陆

连接上之后就可以进行PL/SQL的开发、测试了

2、iSQL*PLUS

其实就是SQL*PLUS 的网页版

3、PL/SQL Developer

用于开发PL/SQL的集成开发环境(IDE),是一个独立的产品,而不是oracle数据库附带的产品.

4、Procedure Builder

是Oracle应用开发工具Developer提供的一个产品.

三、PL/SQL块的结构

PL/SQL程序的基本单位是块,而每个PL/SQL块很明确的分为3部分,如下:

无论PL/SQL程序块的代码量的多与少,它都由这3部分构成,其中执行部分必须有,其它两者可以没有,下面在SQL*PLUS中举例演示.

先打开sqlplus的输出功能
  set serveroutput on
1、只有执行部分
begin                  
  DBMS_OUTPUT.PUT_LINE('Hello World');
end; 
/       

这个语句块将输出Hello World到屏幕.

2、包含声明部分、执行部分
declare
  v_str varchar(20);  
  
begin      
  v_str := 'Hello World';       
  DBMS_OUTPUT.PUT_LINE(v_str);
end; 
/ 

这里在声明部分定义了一下变量,在执行部分为其赋值,最后输出该变量的值到屏幕.
PL/SQL中赋值使用的是 :=,注意,冒号与等号之间不能有空格.

3、包含声明部分、执行部分、异常处理部分
declare
  v_name varchar(20);   
 
begin      
  select p.name into v_name from product p where p.pid = '1';   
  DBMS_OUTPUT.PUT_LINE('商品id为1的商品名称是' || v_name);
  
exception 
  when NO_DATA_FOUND THEN          --记录不存在
      DBMS_OUTPUT.PUT_LINE('商品不存在');
  when TOO_MANY_ROWS THEN          --记录超过一条
      DBMS_OUTPUT.PUT_LINE('商品id为1的商品不止一个');
end; 
/       
    

这里使用了PL/SQL中特有赋值语句: select ... into ...,其中select后面是要查询的字段,into后面是变量名称,表示把查询出来的值赋值给变量,使用时需要注意:查询的列名顺序、个数要与变量对应,并且该查询语句每次只能返回一条记录,如果没有返回的记录或者返回记录超过一条,那么都会引发异常.
这两个异常分别是:NO_DATA_FOUND、TOO_MANY_ROWS,都是oracle预定义好的.

四、PL/SQL块的分类

使用PL/SQL开发程序时,根据需要实现的应用模块功能,可以将PL/SQL块划分为四种类型:匿名块、命名块、子程序、触发器.

1、匿名块

指没有名称的PL/SQL块,直接以 DECLARE 开始.

2、命名块

指具有特定名称的PL/SQL块

示例1:
<<outer_pl>>
declare 
  v_str varchar(10):='测试';
begin
  DBMS_OUTPUT.PUT_LINE(v_str);  
end;


示例2:
<<outer_pl>>
declare 
  v_str varchar(10):='测试';
begin
  <<inner_pl>>
  begin
      DBMS_OUTPUT.PUT_LINE('1:' ||v_str);
  end;
  DBMS_OUTPUT.PUT_LINE('2:' ||v_str);
end;

命名块与匿名块很相似,只不过在PL/SQL块前使用 <<名称>>命名,主要用处是区分PL/SQL块的多层嵌套关系.

3、子程序

子程序包括:过程、函数、包,开发子程序时,既可以开发客户端子程序,也可以开发服务端的子程序,子程序可以简化客户端的开发和维护,并且能提高程序的性能.

4、触发器

指隐含执行的存储过程,它可以使用PL/SQL、JAVA、C进行开发,当发生特定事件时,Oracle会自动执行触发器的相应代码,触发器由触发事件、触发条件(可选)、触发操作3部分组成.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,151评论 6 523
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,465评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,429评论 0 368
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,147评论 1 301
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,149评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,614评论 1 315
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,965评论 3 429
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,950评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,486评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,524评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,640评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,228评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,976评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,407评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,552评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,215评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,714评论 2 366

推荐阅读更多精彩内容

  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 3,527评论 0 7
  • 第四十二章七十九言 【文】 傅奕《道德经古本篇》第四十二章 道生一,一生二,二生三,三生万物。万物负阴而袌阳,沖气...
    孤鸿学士阅读 1,358评论 1 7
  • 许多欢愉在我看来是罪恶的,例如喝酒是罪恶的,逛街是罪恶的;当然我绝不会放弃此类欢愉,但这些事情对我并无快乐可言,因...
    蓉宝宝不是茸宝宝阅读 255评论 0 0
  • 需求:低版本正常使用,新版本提交审核;审核通过后,新版本正常,低版本提示更新。 app运行中的几种状态 第一次启动...
    lesmiserables0阅读 467评论 0 1
  • 如果你现在在为做着一份清闲又无聊的工作而抱怨不已,我想说你是幸福的,作为一名孕妇的我来说,工作对我来说岌岌可危,没...
    魔导阅读 556评论 0 1