设为首页 加入收藏

TOP

【PLSQL】变量声明,结构语句,cursor游标(一)
2015-11-21 02:09:10 】 浏览:8220
Tags:PLSQL 变量 声明 结构 语句 cursor 游标

PLSQL是ORACLE在标准SQL基础上增加了过程化处理,把DML和SELECT语句组织在PLSQL代码的过程性单元中。

PLSQL扩展了变量和类型,控制语句,过程和函数。

1.1 PLSQL程序结构

PLSQL块包括:

声明部分:DECLARE

执行部分:begin

异常处理:exception

例如:

declare

v_AccountID number(5) :=1001;

v_RealName varchar(20)

Begin

select real_name into v_RealName

from account where id=v-Accountid

exception

when no_data_found then

insert into Fee_log(descr)

values(“account 1001 does not exist!”);

commit;

end;

1.2 PLSQL运行过程

客户端应用程序PLSQL:-----PLSQL引擎(过程性语句执行器)----sql语句执行器

注释:

单行注释:——

多行注释:/* */

1.3变量和数据类型

标量类型包括:数字型,字符型,日期型,布尔型

复杂类型包括:record,associative array,nested table, varray

1.3.1 标量类型

数字类型:

u number

u number的子类型dec(38),float(38),real(38)

u binary_integer(只能用于plsql)

字符型:

u varchar2,varchar

u string(只能用于plsql)

u char

u long

Date

Boolean

u 用于存储逻辑值

u 不能像数据库中插入boolean类型的数据

u 不能讲列植保存到boolean变量中;

u 只能对boolean变量执行逻辑操作;

1.3.2变量声明

语法:

var_name type [constant] [not null] [:=value];

PLSQL规定没有初始化的变量为NULL

例如:

declare

v_realName varchar2(20);

v_baseCost number(7,2) :=5.9;

v_count binary_integer :=0;

1.3.3 %TYPE方式

变量具有和数据库的表中某列或其他变量相同的类型;

declare v_realName varchar2(20);

declare v_realName account.real_name%TYPE;

declare

v_tempvar number(7,3) not null :=12.3;

v_anothervar v_tempvar%type :=12.3;

1.4 条件语句

if Boolean_expression1 Then

ELSIF Boolean_expression2 then

ELSE

END IF;

1.5 Loop循环语句

loop

statement1;

statement2;

exit when condition

end loop;

1.6 while循环语句

while Boolean_expresstion loop

statement1;

statement2;

end loop;

1.7 for循环语句

for 循环器 in下限。。上限 loop

statement1;

statement2;

exit when condition

end loop;

1.8 PLSQL中的DML

可以在PLSQL中石油标准SQL:

1. DML

2. 事务控制语句TCL

例如,begin

insert into host(id) values(’10.0.2.1’);

commit;

end;

PLSQL中本地动态SQL是使用execute immediate语句来执行ddl语句

例如,begin

execute immediate ‘CREATE TABLE TEST(c1 number)’;

end;

DML语句使用本地动态sql来实现的(使用execute immediate语句实现)

例如,begin

execute immediate ‘insert into test values (1)’;

end;

sql语句的编译发生在PLSQL语句块的编译阶段;

sql语句的执行发生在PLSQL语句的执行阶段;

所有一般这样写:

begin

execute immediate ‘CREATE TABLE TEST(c1 number)’;

execute immediate ‘insert into test values (1)’;

end;

此时PLSQL编译的时候,create语句insert语句为字符串,不需要sql语句编译;

因此,PLSQL语句完成建表和插入数据的时候,必须使用execute immediate;

1.9 PLSQL语句中的SELECT语句

根据select语句返回的记录数,实现分为两类:

当仅返回一条记录的时候:

select … into …语句实现;

当返回0条或者多条记录的时候

用cursor指针来实现

若结果是单行单列,into字句后用标量类型,与字段类型相同;

若查询结果为单行多列,into子句后的变量个数,顺序,数据类型和select语句后面的目标匹配,也可以用记录record类型类记录;

1.9.1 record类型

语法定义:

type t_cout_rec is record //记录类型为t_cost_rec

( base_cost cost.base_cost%type,

base_duration cost.base_duration%type;

unit_cost cost.unit_cost%type

)

v_cost t_cost_rec;

v_cost_1 t_cost_rec;

1.9.2 %ROWTYPE

用表结构和视图结果定义变量,record类型;record成员的名称和类型与表或者视图的列名称和类型完全相同;

例如,v_cost cost%ROWTYPE;

1.9.3 record变量的引用

begin

v_cost.base_cost:=5.9

v_cost.base_duration:=20;

v_cost.unit_cost:=0.4

v_cost_1=:=v_cost;

select base_cost,base_duration,unit_cost int v_cost_1 from cost;

end;

在inert语句和update语句中使用记录类型变量

例如,假设cost_t1表事先存在

begin

insert into cost_t1 values v_cost;

update cost_t1 set row=v_cost_1;

commit;

end;

1.10 cursor游标

根据select语句返回的记录数,若返回记录数为0条或者多条用cursor实现;

oracle所知晓的每一个sql语句都有唯一的cursor与之想对应;

oracle使用专用的sql工作去来执行sql语句,存储处理信息,这个工作去称为“cursor”

cursor分为隐式cursor和显式的cursor

隐式cursor:

--select .. into语句

--DML

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇指尖上的数据库之无中生有 下一篇PostgreSQL-系统表、系统视图

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目