您的位置:首页 > 数据库 > Oracle

《精通Oracle10gPLSQL编程》3、PL/SQL基础

2013-04-09 00:51 141 查看
块(Block)是PL/SQL的基本程序单元。

PL/SQL块基本结构:

DECLARE
/* 定义部分 */
BEGIN
/* 执行部分 */
EXCEPTION
/* 例外处理部分 */
END;/* 块结束标记 */
块分类:匿名块、命名块(<<>>)、子程序(过程、函数、包)、触发器

---------------------------------------------------------------------------------------------------------

定义并使用变量

a.标量(Scalar)类型、

aaa number(10);
bbb constant number(3,2) := 0.01;
ccc varchar2(20) default 'ccc';
当定义PL/SQL变量存放列值时,必须确保变量使用合适的数据类型和长度,否则可能出错。为了避免错误,可以使用%TYPE属性定义变量,使用%TYPE定义变量时,会按照数据库列或其他变量来确定新变量的类型及长度。

v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
v_sal2 v_sal%TYPE;
b.复合(Composite)类型、

复合变量是用于存放多个值得变量。PL/SQL包括PL/SQL记录、PL/SQL表、嵌套表、VARRAY等四种复合数据类型。

PL/SQL记录:类似高级语言中的结构

create table emp(
id number(10),
ename varchar2(20),
etitle varchar2(20)
);

insert into emp values (1,'aaa','a_title');

DECLARE
TYPE emp_record_type IS RECORD(
v_name emp.ename%TYPE,
v_title emp.etitle%TYPE
);
emp_record emp_record_type;
BEGIN
select ename,etitle into emp_record from emp where id = 1;
dbms_output.put_line('name : ' || emp_record.v_name);
END;
PL/SQL表:类似高级语言中的数组

DECLARE
TYPE ename_table_type IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
ename_table ename_table_type;
BEGIN
select ename into ename_table(0) from emp where id = 1;
dbms_output.put_line('name : ' || ename_table(0));
END;
嵌套表(Nested Table):类似高级语言中的数组

CREATE OR REPLACE TYPE emp_type AS OBJECT(
name varchar2(20),title varchar2(20)
);
CREATE OR REPLACE TYPE emp_array IS TABLE OF emp_type;
对象emp_type用于存储emp信息,而emp_array是基于emp_type的嵌套表类型,可以用于存储多个雇员信息。

VARRAY(变长数组):类似嵌套表,但是元素个数有限制。

CREATE OR REPLACE TYPE emp_type AS OBJECT(
name varchar2(20),title varchar2(20)
);
CREATE OR REPLACE TYPE emp_array IS VARRAY(20) OF emp_type;


c.参照(Reference)类型、

参照变量是用于存放数值指针的变量。可使用参照变量使得应用程序共享相同对象,降低占用空间。

游标变量(REF CURSOR)

declare
type c1 is ref cursor;
emp_cursor c1;
v_ename emp.ename%TYPE;
v_title emp.etitle%TYPE;
begin
open emp_cursor for select ename,etitle from emp where id = 1;
loop
fetch emp_cursor into v_ename,v_title;
exit when emp_cursor%notfound;
dbms_output.put_line(v_ename);
end loop;
end;


对象类型变量(REF obj_type)

d.LOB(Large Object)类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: