断断续续学过,这次系统地来读读。
(一)
PL/SQL是oracle在标准SQL语言上的过程性扩展,它不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件语句和循环语句),允许使用异常处理oracle错误等。通过使用PL/SQL,可以在一个PL/SQL块中包含多条SQL语句和PL/SQL语句。PL/SQL具有以下优点:
1。提高应用系统的运行性能。
通过使用PL/SQL块包含多条SQL语句,从而减少了SQL语句的发送次数,降低了网络开销,提高了应用程序性能
2。提供模块化的程序设计功能。
将企业规则和商业逻辑集成到PL/SQL子程序当中,提供给客户端调用,简化了客户端应用程序的开发和维护工作,降低了耦合度
3。允许定义标识符,允许定义变量、常量、游标和异常等标识符
4。具有过程语言控制结构,允许使用条件分支语句和循环语句
5。具有良好的兼容性,在允许运行oracle的任何平台上执行,不仅在数据库服务端执行,也可以在oracle提供的工具中开发PL/SQL
6。处理运行错误,使用PL/SQL提供的EXCEPTION,开发人员可以集中处理各种oracle错误和PL/SQL错误,简化了错误处理。
(二)
PL/SQL块的概念:
Block是PL/SQL的基本单元,编写PL/SQL本质上就是编写PL/SQL块,块的嵌套层次没有限制。
1。块的结构:块由3部分组成
DECLARE
定义部分——定义常量,变量,游标,异常,复杂数据类型等
BEGIN
执行部分
EXCEPTION
异常处理部分
END ; /**/ /* 块结束标志 */
其中只有执行部分是必须的!
2。分类:
1)匿名块,匿名块是指没有名称的PL/SQL块,可以内嵌到应用程序中,如:
declare
v_name VARCHAR2 ( 10 );
BEGIN
select name into v_name from test where name =& no;
dbms_output.put_line( ' 名字: ' || v_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line( ' 找不到该名字 ' );
end ;
2)命名块:与匿名块相似,使用命名块主要是为了区分多级嵌套关系,如:
<< out >>
declare
v_name VARCHAR2 ( 10 );
BEGIN
<< inner >>
begin
null ;
end ;
-- <<inner>>
select name into v_name from test where name =& no;
dbms_output.put_line( ' 名字: ' || v_name);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line( ' 找不到该名字 ' );
end ; -- <<outer>>
3)子程序,又可以分成3种:过程、函数和包
A。过程用于执行特定操作,当建立过程时既可以指定输入参数,也可以指定输出参数,从而在应用环境和程序间传递数据,使用CREATE PROCEDURE语句,如:
create or replace PROCEDURE update_test(id2 NUMBER ,money2 LONG )
is
e_no_row EXCEPTION;
begin
update test set money = money2 where id = id2;
if SQL % NOTFOUND THEN
RAISE e_no_row;
end if ;
EXCEPTION
WHEN e_no_row THEN
raise_application_error( - 20004 , ' 该test不存在 ' );
end update_test;
B)函数,与过程主要不同是函数需要返回数据,在函数头和函数体都必须有RETURN语句,如:
create or replace FUNCTION get_long(name2 VARCHAR2 )
RETURN LONG IS
avg_money NUMBER ;
begin
select money into avg_money from test where name = name2;
RETURN avg_money;
end ;
C)包,类似JAVA包的概念,包含两部分,包规范和包体,包规范相当于C++中的头文件声明子程序,而包体包含这些子程序的具体实现。调用包中的子程序时,需要 ‘包名.子程序名’ 这样的形式调用
4。触发器是指隐含执行的存储过程,定义触发器需要指定触发事件和触发操作,常见触发事件如insert,update,delete等,使用CREATE TRIGGER命令建立
文章转自庄周梦蝶 ,原文发布时间5.17