一、PL/SQL简介

   PL/SQL 是 Procedure Language & Structured Query Language 的缩写。PL/SQL 是对 SQL 语言存储过程语言的扩展。

  PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由 于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。PL/SQL 是 ORACLE 系统的核心语言,现在 ORACLE 的许多部件都是由 PL/SQL 写成。

  在 PL/SQL 中可以使用的 SQL 语句有: INSERT,UPDATE,DELETE,SELECT … INTO,COMMIT,ROLLBACK,SAVEPOINT。

  提示:在 PL/SQL 中只能用 SQL 语句中的 DML 部分,不能用 DDL 部分,如果要在 PL/SQL 中使用 DDL(如 CREATE table 等)的话,只能以动态的方式来使用。

二、PL/SQL块

1.结构:

PL/SQL 程序由三个块组成,即声明部分、执行部分、异常处理部分

DECLARE

/* 声明部分: 在此声明 PL/SQL 用到的变量,类型及游标,以及局部的存储过程和函数 */

BEGIN

/* 执行部分: 过程及 SQL 语句 , 即程序的主要部分 */

EXCEPTION

/* 执行异常部分: 错误处理 */

END;

其中 执行部分是必须的。

2.分类:

PL/SQL 块可以分为三类:

1. 无名块:动态构造,只能执行一次。

2. 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它 们。

3. 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

3.标识符:

PL/SQL 程序设计中的标识符定义与 SQL 的标识符定义的要求相同。

4.变量类型

记录类型

  定义:

    记录类型是把逻辑相关的数据作为一个单元存储起来,称作 PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。

  格式:

    TYPE record_type IS RECORD(

    Field1 type1 [NOT NULL] [:= exp1 ],

    Field2 type2 [NOT NULL] [:= exp2 ],

    . . . . . .

    Fieldn typen [NOT NULL] [:= expn ] ) ;

  实例:

declare
type test_rec is record(
l_name varchar2(30),
d_id number(4));
v_emp test_rec;
begin
select last_name,department_id into v_emp
from employees
where employee_id = 200; dbms_output.put_line(v_emp.l_name || ', '|| v_emp.d_id);
end;

  提示:

    1) DBMS_OUTPUT.PUT_LINE 过程的功能类似于 Java 中的 System.out.println() 直接将输出结果送到标准输出中.

    2) 在使用上述过程之前必须将 SQL * PLUS 的环境参数 SERVEROUTPUT 设置为 ON, 否则将看不到输出结果: set serveroutput on

使用%TYPE

  定义:定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型 相同,这时可以使用%TYPE。

  好处:所引用的数据库列的数据类型可以不必知道;所引用的数据库列的数据类型可以实时改变。

  实例:

declare
type test_rec is record(
l_name employees.last_name%type,
d_id employees.department_id%type);
v_emp test_rec;
begin
select last_name,department_id into v_emp
from employees
where employee_id = 200; dbms_output.put_line(v_emp.l_name || ', '|| v_emp.d_id);
end;

使用%ROWTYPE

  定义:PL/SQL 提供%ROWTYPE 操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。

  好处:所引用的数据库中列的个数和数据类型可以不必知道;所引用的数据库中列的个数和数据类型可以实时改变。

  实例:

declare
v_emp employees%rowtype;
begin
select * into v_emp
from employees where employee_id = 200;
dbms_output.put_line(v_emp.last_name||', '||v_emp.department_id);
end;

5.流程控制语句

条件语句——if:

格式1:                格式3:

IF <布尔表达式>            IF <布尔表达式>

THEN PL/SQL 和 SQL 语句;        THEN PL/SQL 和 SQL 语句;

END IF;                  ELSIF < 其它布尔表达式>

                    THEN 其它语句;

格式2:                  ELSIF < 其它布尔表达式>

IF <布尔表达式>              THEN 其它语句;

THEN PL/SQL 和 SQL 语句;        ELSE 其它语句;

ELSE 其它语句;               END IF;

END IF;               

                   提示: ELSIF 不能写成 ELSEIF

条件语句——case表达式:

格式:

CASE selector

  WHEN expression1 THEN result1

  WHEN expression2 THEN result2

  WHEN expressionN THEN resultN

  [ ELSE resultN+1]

END;

实例:

DECLARE

  V_grade char(1) ;

   V_appraisal VARCHAR2(20);

BEGIN

   V_appraisal :=

  CASE v_grade

    WHEN ‘A’ THEN ‘Excellent’

    WHEN ‘B’ THEN ‘Very Good’

    WHEN ‘C’ THEN ‘Good’

    ELSE ‘No such grade’

    END;

  DBMS_OUTPUT.PUT_LINE(‘Grade:‘||v_grade||’ Appraisal: ‘|| v_appraisal);

END;

循环语句——简单循环:

LOOP

  要执行的语句;

  EXIT WHEN <条件语句> ;/*条件满足,退出循环语句*/

END LOOP;

循环语句——WHILE循环(比前一种好用):

WHILE<布尔表达式> LOOP

  要执行的语句;

END LOOP;

循环语句——数字式循环:

FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP

  要执行的语句;

END LOOP;

注意:每循环一次,循环变量自动加 1;使用关键字 REVERSE,循环变量自动减 1。跟在 IN REVERSE 后面的数字必 须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用 EXIT 退出循环。

顺序语句——标号和GOTO语句:

PL/SQL 中 GOTO 语句是无条件跳转到指定的标号去的意思,一般用来跳出循环语句。语法如下:

GOTO label;

. . . . . .

<<label>> /*标号是用<< >>括起来的标识符 */

Oracle学习DayFive(PL/SQL)的更多相关文章

  1. oracle学习之pl/sql使用==转载

    PLSQL循序渐进全面学习教程(全):https://blog.csdn.net/spark998/article/details/2065269

  2. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. 《oracle每日一练》免安装Oracle客户端使用PL/SQL

    免安装Oracle客户端使用PL/SQL Oracle客户端挺招人烦的,部署连接它的应用通常需要先安装它的客户端,安装程序要求在目标机器上写注册表,假设你没有洁癖的话,你仍可能被下面的事情绊住:当你的 ...

  5. Oracle 客户端安装 + pl/sql工具安装配置

    Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/databas ...

  6. oracle instantclient basic +pl/sql 安装和配置

    oracle instantclient basic +pl/sql 安装和配置 大家都知道,用PL/SQL连接Oracle,是需要安装Oracle客户端软件的,oracle客户端有点大,比较耗资源. ...

  7. Oracle数据库之PL/SQL触发器

    Oracle数据库之PL/SQL触发器 1. 介绍 触发器(trigger)是数据库提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是 ...

  8. Oracle数据库之PL/SQL包

    Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来 ...

  9. Oracle数据库之PL/SQL过程与函数

    Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...

  10. Oracle数据库之PL/SQL异常处理

    Oracle数据库之PL/SQL异常处理 异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的. PL/SQL程序设计过程中,即使是写得最好的程序也可能会遇到错误或未预料 ...

随机推荐

  1. spring cloud之Feign的使用

    原始的调用客户端的方式是通过注入restTemplate的方式 restTemplate.getForObject("http://CLIENT/hello", String.cl ...

  2. leecode第二百三十八题(除自身以外数组的乘积)

    class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int len= ...

  3. 括号配对问题-java:Stack

    题目描述: 现在,有一行括号序列,请你检查这行括号是否配对. 输入描述: 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串 ...

  4. Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet

    一个地图上有若干障碍,问允许出现一个障碍的最大子矩形为多大? 最大子矩形改编 #include<bits/stdc++.h> using namespace std; #define re ...

  5. 【差分约束系统】 note

    [差分约束系统] note >>>>题目 [题目描述] 最近有一款很火的游戏,叫做八分音符酱,它和马里奥很相似,不过它的跳跃距离是由你的声音大小来控制的.不过我们现在对玩法就行 ...

  6. ThinkPHP5.0源码学习之缓存Cache(二)

    一.使用Cache类 TP5.0框架默认使用的是File文件缓存驱动,可以修改全局配置文件convention.php中的type,将其改为Redis,这样使用的就是Redis缓存驱动了.

  7. RBMQ发布和订阅消息

    RBMQ发布和订阅消息 exchange 参考翻译自: RabbitMQ官网 生产者并非将消息直接发送到queue,而是发送到exchange中,具体将消息发送到特定的队列还是多个队列,或者是丢弃,取 ...

  8. Asp.Net MVC+EF+三层架构

    架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...

  9. FileSystemObject对象及常用方法

    FSO 对象模式包含在 Scripting 类型库中,该库位于 Scrrun.dll 文件中.因而,要使用 FSO 对象模式,必须把 Scrrun.dll 放在 Web 服务器的适当系统目录中. 要用 ...

  10. 箭头函数里this理解

    先来看代码: var obj1={ id:4, fn:function(){ var f=() => { console.log(this); //object,f()定义在obj1对象中,th ...