一、什么是PL/SQL?
PL/SQL(Procedural Language/Structure Query Language) 是Oracle对标准sql规范扩展,它全面支持SQL的数据操作、事务控制等。
二、PL/SQL编写规则
1.标识符命名规则
1)变量,建议使用v_作为前缀,如v_sal、v_job等
2)常量,建议使用c_作为前缀,如c_rate。
3)游标,建议使用_cursor作为后缀,如emp_cursor
4) 异常,建议使用e_作为前缀,如e_integrity_error
5)当定义PL/SQL表类型时,建议使用_table_type作为后缀,如sql_table_type
6)当定义PL/SQL表变量时,建议使用_table作为后缀,如sal_table
7)当定义PL/SQL记录类型时,建议使用_record_type作为后缀,如emp_record_type
8)当定义PL/SQL记录变量时,建议使用_record作为后缀,如emp_record
2.大小写规则
1)SQL关键字采用大写格式,如SELECT UPDATE SET WHERE
2)PL/SQL关键字采用大写格式,如DECLARE BEGIN END等
3)数据类型采用大写格式,如INT VARCHAR2 DATE
4)标识符合参数采用小写格式,如v_sal c_rate等
5)数据库对象和列采用小写格式,如emp sal ename等
三、PL/SQL编程结构
1、PL/SQL程序块的基础结构
DECLARE
-- 声明部分 :用来定义变量 初始化变量等
BEGIN
-- 执行部分 用来执行查询等操作部门
EXCEPTION
--用来处理异常部分
END;
/
1)声明部门:主要用来声明变量,常量,数据类型,游标,异常处理名称以及局部子程序定义等,这个部分是由DECLARE开始的
2)执行部门:这部分通过变量赋值、流程控制、数据查询,数据操纵、数据定义等实现功能,由关键字BEGIN开始。
3)异常处理部分:处理异常或者错误
4)/ :PL/SQL程序块需要使用正斜杠(/)结尾,才能执行。
注意点:
执行部分是必须的,声明部分和异常部分是可选的
每个PL/SQL都是由BEGIN/DECLARE开始的,已END结束的
每条语句都必须以分号结束,sql语句可以是多行的,但是分号表示该语句的结束;另外一行中也可以有多条sql语句,他们之间以分号分隔。
示例代码:
DECLARE
a NUMBER(4); -- 声明一个变量
BEGIN
a:=1+2;
DBMS_OUTPUT.PUT_LINE(‘1+2=‘||a);--输出变量值
EXCEPTION --异常处理
WEHN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘出现异常‘);
END;
/
解释说明:DBMS_OUTPUT是oracle提供的系统包,PUT_LINE是该包所包含的过程,用于输出字符串信息。在使用DBMS_OUTPUT包输出数据或消息时,必须要将SQL*PLUS的环境变量SERVEROUT设置为ON
2.PL/SQL数据类型
对于PL/SQL程序来说,它的常量和变量的数据类型,除了使用与SQL相同的数据类型,还有特定类型
BOOLEAN 取值true false 或null
BINARY_INTEGER 带符号整数
NATURAL BINARY_INTEGER的子类型,表示非负整数
NATURALN BINARY_INTEGER的子类型,不为null的非负整数
POSITIVE BINARY_INTEGER的子类型 , 表示正整数
POSITIVEN BINARY_INTEGER的子类型 ,表示不为null的正整数
SIGNTYPE BINARY_INTEGER的子类型 ,取值为-1、0或1
PLS_INTEGER PLS_INTEGER是专为PL/SQL程序使用的数据类型,它不可以在创建的表的列使用。PLS_INTEGER比NUMBER变量更小的表示范围,占用 小。PL_INTEGER更有利于利用CPU
SIMPLE_INTEGER 11G新增类型,BINARY_INTEGER的子类型,取值范围与BINARY_INTEGER相同,但不能为null值。在使用时如果内存溢出不会触发
异常,只会简单截断结果。
STRING 与VARCHAR2相同
RECORD 一组其他类型的组合
REF CURSOR 指向一个行级的指针
3.变量和常量
1)
最常用的变量是标量变量。
variable_name data_type [not null :=default value];
variable_name 变量名称
not null :可以对变量定义非空约束,如果使用了此选项,必须为变量赋值,并且在程序其他地方不能讲变量修改为空
例子:
定义一个变量并给这个变量赋值为200
declare v_num number(4); begin v_num:=200; DBMS_OUTPUT.put_line(‘变量值为:‘||v_num); end; /
定义一个类型为NUMBER的变量v_num,并赋值为200,然后使用DBMS_OUT.put_line过程输出v_num变量的值
2)常量
constant_name constant data_type {:=default}value;
constant_name 常量名
constant 定义常量的修饰符
data_type 常量的数据类型
:=|default 常量赋值,其中:=赋值操作符 冒号与等号之间不能有空格。
示例:
declare v_num constant number(4):=500; begin DBMS_OUTPUT.put_line(‘常量值为:‘||v_num); end; /
4、复合数据类型
复合数据类型主要由三种:%type %ROWTYPE 以及自定义记录类型
1)%TYPE类型
有时候使用表中的数据给变量赋值,首先需要知道变量所对应类数据类型,否则无法确定变量的数据类型。使用%type可以解决这,%type用于隐式将变量的数据类型指定为对应列的数据类型。
格式:
var_name table_name.cloumn_name%type[not null]{:=|default}value
var_name 变量名
table_name 表名
cloumn_name 表中要赋值给变量的数据的数据列的名字
//使用%type关键字声明变量类型v_name和v_deptno,并从employess表中查询编号为200的员工姓名和部门编号
declare v_name employess.name%type; v_deptno employess.department_id%type; begin select name ,department_id into v_name,v_deptno from employess where employe_id=200; end; /
2)记录类型
记录类型是将一组逻辑类型相关的数据作为一个单元存储起来,记录类型可以理解为将多个类型的变量封装起来定义一个类型叫做记录类型的变量 然后使用相当于java类
,对象有多个属性,通过类名.属性名调用。但是必须包括一个普通的变量或者记录数据类型的成员。使用记录类型变量要先定义一个记录类型机构的变量(通俗的理解就是先定义一个记录类型的结构,),然后才可以声明一个记录类型的变量。定义记录类型必须使用type语句,在语句中指出将在记录中包含的字段以及数据类型。
语法:
type record_name is record(
field1_name data_type[not null] [:=default_value],
field2_name data_type[not null] [:=default_value];
)
record_name 自定义记录数据类型名称,如number
field1_name 记录数据类型中的字段名
data_type:该字段的数据类型
示例:
定义一个名record_my_type的记录类型,该记录类型由字符串的v_name和整数的v_age变量组成,变量名为re_person
declare -- 定义了一个记录数据类型结构的类型(相当于普通类型的number这种) type record_my_type record( v_name varchar, v_age number; ) --声明记录类型变量 re_person record_my_type; begin select name,age into re_person from tb_person where id=100; DBMS_OUTPUT.put_line(‘姓名:‘||re_person.v_name); DBMS_OUTPUT.put_line(‘年龄:‘||re_person.v_age); end; /
原文地址:https://www.cnblogs.com/lwdmaib/p/9160857.html