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. 08Java Server Pages 语法

    Java Server Pages 语法 基础语法 注释 <!--   -->可以在客户端通过源代码看到:<%--   --%>在客户端通过查看源代码看不到. <!--浏 ...

  2. 牛客多校Round 2

    Solved:3 rank:187 H.travel 题意:给一颗带有点权的树 找三条不相交的链 使得点权最大 题解:使用树形DP dp[x][i][0/1] 表示x节点选择i条链 有没有经过x的链 ...

  3. Ansible基于playbook批量修改主机名实战

    Ansible基于playbook批量修改主机名 安装Ansible,相信这里也不用多说,大家都知道 说一下环境:这里的主机名是修改之后的,我先把其他两台的主机名改为别的 192.168.30.21 ...

  4. vue-router + axios token登录状态认证

    vue项目中登录状态判断往往基于jwt认证,我们可以采用判断本地是否存在token,及token是否过期或token值错误 1.利用vue-router 钩子函数判断本地是否存在token impor ...

  5. BigDecimal运算

    BigDecimal由任意精度整数未缩放值和32位整数级别组成 . 如果为零或正数,则刻度是小数点右侧的位数. 如果是负数,则数字的非标定值乘以10,以达到等级的否定的幂. 因此,BigDecimal ...

  6. APUE 文件IO

    文件 IO 记录书中的重要知识和思考实践部分 Unix 每个文件都对应一个文件描述符(file descriptor),为一个非负整数,一个文件可以有多个fd, 后面所有与文件(设备,套接字等)有关操 ...

  7. Django-Rest framework中文翻译-Request

    REST framework的Request类扩展自标准的HttpRequest,增加了REST framework灵活的请求解析和请求验证支持. 请求解析 REST framework的Reques ...

  8. RequestMapping_Ant 路径

    [使用@RequestMapping映射请求] [Ant风格资源地址支持3种匹配符] (1)? :匹配文件名中的一个字符. (2) * :匹配文件名中的任意字符. (3) ** :**匹配多层路径. ...

  9. 【Codeforces 675D】Tree Construction

    [链接] 我是链接,点我呀:) [题意] 依次序将数字插入到排序二叉树当中 问你每个数字它的父亲节点上的数字是啥 [题解] 按次序处理每一个数字 对于数字x 找到最小的大于x的数字所在的位置i 显然, ...

  10. BAT、网易、京东等如何做大数据风控的?

    大数据风控目前应该是前沿技术在金融领域的最成熟应用,相对于智能投顾.区块链等还在初期的金融科技应用,大数据风控目前已经在业界逐步普及,从BATJ这样的大企业,到交易规模比较大的网贷平台,再到做现金贷. ...