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

本文介绍了PL/SQL的基础知识,重点讲解了块作为基本程序单元的结构,并详细阐述了复合变量的四种类型:PL/SQL记录、PL/SQL表、VARRAY和LOB,以及如何利用它们进行数据存储。此外,还提及了参照变量和游标变量在程序中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

块(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)类型


对于oracle技术人员而言,怎么强调掌握pl/sql的重要性都不过分。但是,真正精通pl/sql绝非易事。事实上,在现有的oracle应用程序中充斥着太多质量不佳的pl/sql代码,它们要么没有充分利用oracle特有的功能,要么是在误用或者滥用。这种现象导致了许多对pl/sql本身能力不公正的批评。.    本书由全球oracle技术专家组织oaktable network的多位大师联手编写,是为pl/sql正名的名著。与市面上许多pl/sql图书只是纸上谈兵、局限于语法和功能本身不同,本书从实战出发,讲述如何正确、充分地运用语言特性,除了pl/sql的基本功能之外,也包括数据的高效处理、安全、触发器、高效的调试技术等。作者在讲解每一个特性 时都辅以经过实战检验的示例,更与读者分享了大量多年积累的独家经验。有本书在手,你将学会如何充分发挥pl/sql的巨大潜能,编写出可靠、高效且易于 维护的一流程序。... 作译者   Connor McDonald 世界著名的Oracle技术专家,Oracle认证专家,具有十多年的Oracle系统开发经验,以精深的PL/SQL造诣享誉业界。他的个人网站www.oracledba.co.uk是极具影响的Oracle技术资源。.   Chaim Katz Oracle认证专家,擅长数据库管理和PL/SQL开发,为各种Oracle技术期刊写过大量文章。   Christopher Beck Oracle公司资深技术专家,专攻核心数据库技术和Web应用开发。除本书外,他还与Joel R. Kallman和Tom Kyte等人合著了畅销书Beginning Oracle Programming。..   Joel R. Kallman Oracle公司软件开发总监.   David C. Knox 世界著名的Oracle安全专家,Oracle公司SolutioncEngineering集团的高级总监....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值