PL/SQL【Procedural Language/SQL】
PL/SQL是一种高级数据库程序设计语言,PL/SQL语言在将SQL语言的灵活性及功能与第三代语言的可配置能力相结合方面是独一无二的。该语言集成了面向过程语言的过程结构和强大的数据库操作,为设计复杂的数据库应用提供了功能强大、健壮可靠的程序设计语言。该语言专门用于在各种环境下对Oracle数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。
PL/SQL is Oracle's procedural extension to industry-standard SQL. PL/SQL naturally, efficiently, and safely extends SQL. Its primary strength is in providing a server-side, stored procedural language that is easy-to-use, seamless with SQL, robust, portable, and secure.
PL/SQL语言是Oracle公司对标准SQL语言的过程化扩展。它将SQL语言(4GL)的强大灵活性与3GL的过程性结构融为一体。
PL/SQL是Procedural Language/SQL的缩写。正如其名字所示,PL/SQL通过增加了用在其他过程性语言中的结构来对SQL进行了扩展,例如:
变量和类型(包括预定义和用户自定义)。
控制结构,如IF-THEN-ELSE语句和循环。
If <condition> then … end if
If <condition> then … else … end if
If <condition> then … elsif <condition>
then ….. End if
e.g.
If v_balance >= 50000
then v_cust_type := ‘VIP’;
elsif v_balance >= 30000
then v_cust_type := ‘Advanced’;
else v_cust_type := ‘Normal’;
end if;
循环
Iterative control statement
Loop
…
exit [when <conditon>]
end loop;
While <condition>
loop
….
End loop;
For <counter> in [reverse] <n1..n2>
loop
…
end loop;
过程和函数。
对象类型和方法
2. 游标
游标用来处理从数据库中检索的多行记录(使用SELECT语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集。
为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针。
2.1 显示游标
显示游标被用于处理返回多行数据的SELECT 语句,游标名通过CURSOR….IS 语句显式地赋给SELECT 语句。
在PL/SQL中处理显式游标所必需的四个步骤:
1)声明游标;CURSOR cursor_name IS select_statement
2)为查询打开游标;OPEN cursor_name
3)取得结果放入PL/SQL变量中;
FETCH cursor_name INTO list_of_variables;
FETCH cursor_name INTO PL/SQL_record;
4)关闭游标。CLOSE cursor_name
注意:在声明游标时,select_statement不能包含INTO子句。当使用显式游标时,INTO子句是FETCH语句的一部分。
2.2 隐式游标
所有的隐式游标都被假设为只返回一条记录。
使用隐式游标时,用户无需进行声明、打开及关闭。PL/SQL隐含地打开、处理,然后关掉游标。
例如:
…….
SELECT studentNo,studentName
INTO curStudentNo,curStudentName
FROM StudentRecord
WHERE name=’gg’;
上述游标自动打开,并把相关值赋给对应变量,然后关闭。执行完后,PL/SQL变量curStudentNo,curStudentName中已经有了值。
PL/SQL的优点
从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句。
PL/SQL的优点如下:
. PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。
. PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型
. PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。
. 可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。
. PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的
. 对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。