1. PL/SQL块的基础结构

DECLARE

/*

* 定义部分——定义常量、变量、复杂数据类型、游标、用户自定义异常

*/

BEGIN

/*

* 执行部分——PL/SQL语句和SQL语句

*/

EXCEPTION

/*

* 异常处理部分——处理运行错误

*/

END;

/*块结束标记 */

2. 使用变量和常量

1) PL/SQL 块中可以使用变量和常量
a. 在声明部分声明,使用前必须先声明
b. 声明时必须指定数据类型,每行声明一个标识符
c. 在可执行部分的 SQL 语句和过程语句中使用
2) 声明变量和常量的语法:

identifier [CONSTANT] datatype [NOT NULL]

[:= | DEFAULT expr];

3) 给变量赋值有两种方法:
a. 使用赋值语句 :=
b. 使用 SELECT INTO 语句
例如:

DECLARE

v_name varchar2(10);

BEGIN

select dname  into v_name

from dept

where deptno = 90;

dbms_output.put_line('dname:'|| v_name);

EXCEPTION WHEN NO_DATA_FOUND THEN

dbms_output.put_line('没有该部门');

END;

3. PL/SQL块的类型

1) 匿名块
前面各个示例执行的都是没有名称的匿名块。
2) 子程序
a. 过程:能够完成一系列的增删改查的动作的“方法”。
示例:更新指定姓名员工工资,姓名不区别不大小写。

create or replace procedure update_sal

(p_ename VARCHAR2, p_newsal NUMBER)

AS

BEGIN

UPDATE emp SET sal = P_newsal

WHERE lower(ename) = lower(P_ename);

commit;

END;

调用:

exec update_sal(‘scott’, 2000); --SQL*PLUS中的命令

call update_sal(‘SCOTT’, 2000); --JAVA中调用的语句

b. 函数:能够完成计算并返回计算结果,注意不能修改数据。
示例:计算一个数的两倍后并返回。

create or replace function f_add(a number )

return number

as

begin

return a*2;

end;

调用:

select f_add(2) from dual;

select f_add(deptno) from dept;

c. 触发器:当触发器所监控的表的数据发生改变(增删改)时自动执行的代码块。
d. 包:包用于逻辑“包含”相关的过程和函数,它由包头和包体两部分组成。
示例:将前面的函数f_add定义在包中并调用。 

create or replace package my_bao is

function f_add(a number ) return number;

end;

/

create or replace package body my_bao is

function f_add(a number ) return number

as

begin

return a*2;

end;

end;

/

调用:select my_bao.f_add(2) from dual;

 4. 标量变量 
1) 标量变量
a. 标量变量是指只能存入单个数值的变量。
b. 标量变量必须先定义后使用。
2) 常用的标量类型
a. VARCHAR2(n):该数据类型用于定义可变长度的字符串 ,n<=4000。
b. CHAR(n):该数据类型用于定义固定长度的字符串,n<=2000。
c. NUMBER(总位数, 小数位):定义整数或小数。
d. DATE:该数据类型用于定义日期和时间数据。
e. BOOLEAN:该数据用于定义布尔变量,其变量的值为TRUE、FALSE或NULL。 注意此类型只能在PL/SQL中使用,表列是没有此类型的。
f. %type:通常用于指定表的某个列的数据类型,可以理解为“的类型”(小技巧:%读“的”)。

示例:打印部门编号为10的部门名称。

declare

v_name dept.dname%type;

begin

select dept.dname into v_name

from dept

where deptno = 10;

dbms_output.put_line('dept = '||v_name);

end;

运行结果:

dept = ACCOUNTING

5. 复合变量

1) 复合变量
a. 复合变量是指用于存放多个值的变量。
b. 在使用复合变量时,必须先用TYPE进行定义“新的数据类型”,然后再用这些新的类型定义新的变量。
2) 复合数据类型
a. 记录类型:可以简单理解为具有多个“属性”的变量。

DECLARE

TYPE emp_record_type IS RECORD (

name emp.ename%TYPE,

salary emp.sal%TYPE);

emp emp_record_type;

BEGIN

SELECT ename,sal,job into emp

FROM emp WHERE empno=7788;

dbms_output.put_line('雇员名:' || emp .name);

END;

b. 索引表类型
PL/SQL索引表类似Collection接口,或者看成是一个1维数组也可以。
不连续
索引可为负数
动态增长
语法:type xx is table of 类型 index by 整型
c. 嵌套表类型
d. 变长数组类型
e. 集合类型
6. 引用变量
1) 引用变量
引用变量是指用于存放数据地址(指针)的变量。
2) 好处
通过使用引用变量,可以使得应用程序共享相同对象,从而降低占用空间。
3) 引用变量类型
a. REF CURSOR:引用游标类型
先定义游标变量,再定义该游标使用的select语句。具体将在后面游标讲解更深入讲解。
b. REF obj_type:引用对象类型
编写对象类型应用时,为了共享相同对象,可以使用REF引用对象类型,REF实际是指向对象实例的指针。

7. LOB变量

1) LOB变量
LOB变量是指用于存储大批量数据的变量。
2) 分类
a. 内部LOB:存储在数据库中,并且支持事务操作(提交、回退、保存点)。
CLOB:存储大批量字符数据(指定字符集)
NCLOB:存储大批量字符数据 (所有字符集)
BLOB:存储大批量二进制数据
b. 外部LOB:只有一种类型,该类型的数据被存储在操作系统文件中,并且不支持事务操作。
BFILE:存储指向操作系统文件的指针

8. 使用SQL*Plus绑定变量

a. 当在SQL*Plus中与PL/SQL块之间进行数据交互时,需要使用SQL*Plus绑定变量来完成。
b. 当在PL/SQL中引用非PL/SQL变量时,必须要在非PL/SQL变量前加冒号(“:”)。 

SQL> var name varchar2(10);

SQL> BEGIN

2       SELECT ename INTO :name FROM emp

3       WHERE empno = 7788;

4    end;

5  /

SQL> print name;

name

---------

SCOTT

9. PL/SQL词汇单元

当编写PL/SQL块时,每个PL/SQL块都包含多行代码,而每行代码又是由多个合法单元组成的,这些合法单元被称为词汇单元。

1) PL/SQL词汇单元分类
a. 标识符
通过使用标识符,可以定义常量、变量、异常、显式游标、游标变量、参数、子程序以及包的名称。
示例:declare v_name emp.ename%type;
b. 字面量
写在代码各种具体的数值,如数字、字符、字符串、日期值或布尔值 。
示例: v_name := 'lovo';
c. 分隔符
分隔符是指具有特定含义的单个符号(+、-、*、/)或组合符号( := 、>=)。
示例: a := 10 + 20 ;
3) 注释
a. 单行注释 --单行注释
b. 多行注释 /*多行注释*/
示例 

DECLARE

--定义v_sal变量

v_sal NUMBER(6,2);

BEGIN

/*

给变量赋值,

然后打印此变量

*/

v_sal := 1000;

dbms_output.put_line(v_sal);

END;

10.PL/SQL代码编写规则

1) 好处
使用适当的编写规则,可以提高代码的可读性,降低程序维护难度。
2) 规则
A. 标识符命名规则
a. v_变量名 定义变量
b. e_变量名 定义异常
c. …….
B. 大小写规则
代码不区别大小写,但建议关键字大写。
C. 代码缩进
D. 嵌套块和变量范围
外部块能够访问内部块的变量,反之则不能。

PL/SQL编程基础的更多相关文章

  1. Oracle数据库编程:PL/SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  2. 【PL/SQL编程基础】

    [PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...

  3. PL/SQL编程基础(三):数据类型划分

    数据类型划分 在Oracle之中所提供的数据类型,一共分为四类: 标量类型(SCALAR,或称基本数据类型) 用于保存单个值,例如:字符串.数字.日期.布尔: 标量类型只是作为单一类型的数据存在,有的 ...

  4. Oracle Pl/SQL编程基础

    Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...

  5. PL/SQL编程基础(五):异常处理(EXCEPTION)

    异常处理 异常产生所带来的问题: 使用EXCEPTION程序块进行异常处理: 实现用户自定义异常. 使用异常可以保证在程序中出现运行时异常时程序可以正常的执行完毕: 用户可以使用自定义异常进行操作. ...

  6. PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)

    PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...

  7. PL/SQL编程基础——PL/SQL简介

    课程教师:李兴华 课程学习者:阳光罗诺 日期:2018-07-28 知识点: 1. 了解PL/SQL的主要特点 2. 掌握PL/SQL块的基本结构 PL/SQL PL/SQL是Oracle在关系数据库 ...

  8. Oracle PL/SQL 编程基础 实例

    create table mytest(name varchar(20),password varchar(30)); create or replace procedure sp_pro2 is  ...

  9. PL/SQL编程基础(四):程序控制(IF,CASE,FOR,LOOP,WHILE LOOP,EXIT,CONTINUE)

    程序控制 程序结构有分支结构与循环结构: 分支结构语法:IF.CASE: 循环结构:FOR.WHILE LOOP:先执行再判断,至少执行一次: WHILE LOOP:先判断再执行,如果不满足条件,就不 ...

  10. PL/SQL编程基础(二):变量的声明、赋值、(赋值、连接、关系、逻辑)运算符

    变量的声明.赋值.运算符 1.声明并使用变量 变量可以在声明时赋值,也可以先定义后赋值: 使用%TYPE与%ROWTYPE可以根据已有类型定义变量. PL/SQL是一种强类型的编程语言,所有的变量都必 ...

随机推荐

  1. JAVA基础——链表结构之双端链表

    双端链表:双端链表与传统链表非常相似.只是新增了一个属性-即对最后一个链结点的引用 如上图所示:由于有着对最后一个链结点的直接引用.所以双端链表比传统链表在某些方面要方便.比如在尾部插入一个链结点.双 ...

  2. CSDN怎么转载别人的博客

    在参考"如何快速转载CSDN中的博客"后,由于自己不懂html以及markdown相关知识,所以花了一些时间来弄明白怎么转载博客,以下为转载CSDN博客步骤和一些知识小笔记. 参考 ...

  3. Linux命令学习(3): zcat 直接查看压缩文件

    版权声明:本文为博主原创文章,未经允许不得转载. zcat 用途:在不解压文件的情况下,直接将文件内容输出到标准输出.(原压缩文件不做任何更改) 格式:zcat [-n] [-V] [FILE] 参数 ...

  4. vue SSR 部署详解

    先用vue cli初始化一个项目吧. 输入命令行开始创建项目: vue create my-vue-ssr 记得不要选PWA,不知为何加了这个玩意儿就报错. 后续选router模式记得选 histor ...

  5. Win2008 Server下配置安装IIS

    最近又买了台服务器,接下来就是配置环境啦. 接下来接记录一下IIS的配置过程. 首先找到服务器管理器 打开后找到角色,点击添加角色 处理添加角色向导 勾选Web服务器(IIS) 点击添加必要功能 然后 ...

  6. 腾讯云:基于 Ubuntu 搭建 VNC 远程桌面服务

    基于 Ubuntu 搭建 VNC 远程桌面服务 前言 任务时间:5min ~ 10min 必要知识 本教程假设您已学习以下 Ubuntu 基本操作: 连接 SSH 执行命令 编辑文件 如果还没有掌握 ...

  7. CodeForces 800B Volatile Kite(点与直线的距离)(Java 实现)

    CodeForces 800B Volatile Kite(点与直线的距离)(Java 实现) 传送门 如果想要一个凸多边形不退化为凹多边形,那么任意的相邻的三个点必然最多形成一条直线.因此我们可以求 ...

  8. Java控制台读写

    Java控制台读写 控制台读 Java中进行控制台读操作主要是通过Scanner,BufferReader,Console类进行 1. Scanner Scanner对象定义 在控制台 Scanner ...

  9. Spring + quartz实现定时发送邮件功能

    在做具体的系统管理时,往往会有每隔一段时间发给用户一些邮件的业务,现在参考的网上的大部分代码,写下了我自己的代码. 在ApplicationContext.xml的内容如下: <?xml ver ...

  10. VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程

    http://unmi.cc/vmware9-install-mac-os-x-mountain-lion 非常详细,赞一下 本教程是在 VMware 9 下安装当前最新版的 Mac OS X Mou ...