ORACLE数据库入门再在屋里坐会 (20)

  是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的数据类型

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzwgw.html