是Oracle在标准的SQL语言上的扩展,实现具体的业务功能。pl/sql不仅允许嵌入SQL语言,还可以定义变量,允许使用条件语句和循环语句,允许使用例外处理各种错误,这样使得它的功能变得更加强大
2、组成1)procedural language:过程语言
2)SQL(Struts Query language):结构化查询语言
当我们执行 PL/SQL块时,请求发送到 ORACLE 服务器,有 PL/SQL 引擎来编译和执行 PL/SQL 块或者子程序,该引擎驻留在 Oracle 服务器中,其中 PL 与 SQL 执行不同分工,过程语句有 PL 语句执行器执行,SQL 语句有 SQL 语句执行器执行
3、PL/SQL块:PL/SQL代码的集合1)逻辑上相关的声明和语法组合在一起
2)块(block)是PL/SQL的基本程序单元编写 pl/sql 程序实际上就是编写 pl/sql 块。要完成相对简单的应用功能,可能只需要编写一个 pl/sql 块;但是如果要想实现复杂的功能,可能需要在一个 pl/sql 块中嵌套其它的 pl/sql 块
4、PL/SQL块的分类(匿名块、非匿名块)根据块的定义和使用,我们可以简单将块分为匿名块和非匿名块,匿名块执行时传入到 PL/SQL 引擎即可,之前没有定义,非匿名块主要包括过程,函数,触发器,程序包等,事先已经在服务器定义好,可直接根据名称执行。
注意:在块中不能直接使用 DDL 语句,但可以通过动态 SQL 来解决
5、PL/SQL块的三大机构:声明部分、可执行部分、异常部分语法:
declare --声明部分(可省略)
变量/常量的定义
begin --可执行部分,由begin开始,end结束,end后必须加分号,实现具体的功能业务
...
exception --异常处理(可省略)
...
end;
PL/SQL编程规范 1、注释--单行注释
/*多行注释*/
2、标识符的命名规范定义变量:建议用 v_作为前缀 v_price
定义常量:建议用 c_作为前缀 c_pi
定义游标:建议用_cursor 作为后缀 emp_cursor
定义例外(异常):建议用 e_作为前缀 e_error
3、各语句必须一分号结束 4、变量名称 数据类型变量名称 数据类型 not null default 值 --not null 必须指定默认值
变量名称 数据类型 := 值 --定义变量时指定默认值(方式一)
变量名称 数据类型 default 值
注:赋值运算符为:“:=”
5、常量的定义:常量在定义时必须赋初始值常量名 constant 数据类型 ; --错误
常量名 constant 数据类型 := 常量值
常量名 constant 数据类型 default 常量值
6、给变量赋值方式一:使用赋值运算符,把具体的数值赋值给变量/常量
变量名称 := 值/表达式 ;
方式二:select into,把查询的数据动态的给变量赋值
select 字段 into 变量名 from 表名 [where 条件];
select 字段1,...,字段n into 变量名1,...,变量n from 表名 [where 条件];
7、&符号:代表由用户根据提示手动输入数据 -> 输入&提示内容
declare
变量名 varchar2 = '&提示内容' ;
declare
name varchar2(4); --name超过4个字符会出错,解决使用%type或定义足够长的字符
begin
select ename into name from emp where empno=&员工编号;
dbms_output.put_line('姓名为:'||name);
end;
8、%type:定义变量的数据类型和长度与数据表某列的一致语法:变量 表名.字段%type
declare
name emp.ename%type;
begin
select ename into name from emp where empno=&员工编号;
dbms_output.put_line('姓名为:'||name);
end;
9、%rowtype:返回一个记录类型,其数据类型和数据表的数据结构一致语法:变量 表名%rowtype
访问数据:
变量.字段
declare
obj emp%rowtype;
begin
select * into obj from emp where empno = 7369;
dbms_output.put_line('姓名='|| obj.ename);
dbms_output.put_line('岗位='|| obj.job);
dbms_output.put_line('薪水='|| obj.sal);
end;
10、异常zero_divide
case_not_found
...
when 异常种类 then
PL/SQL的数据类型