块(Block)是PL/SQL的基本程序单元,编写PL/SQL程序实际就是编写PL/SQL程序。
编写PL/SQL应用模块,块的嵌套层次没有限制。
1.PL/SQL块结构:
DECLARE
/*
*定义部分——定义常量、变量、复杂数据类型、游标、异常
*/
BEGIN
/*
*执行部分——PL/SQL语句和SQL语句
*/
EXCEPTION
/*
*异常执行部分——处理运行错误
*/
END;
DECLARE和EXCEPTION部分是可选的
例:
BEGIN
dbms_output.put_line(‘hello,everyone!’);
END;
/
2.PL/SQL块分类
2.1匿名块(没有名称的PL/SQL块),既可以内嵌到应用程序中,也可以在交互式环境(SQL*Plus)中直接使用。
2.2命名块(具有特定名称标识的PL/SQL块,命名块与匿名块类似,只不过在PL/SQL前使用<<>> 加以标记。)
2.3子程序(包括过程、函数和包)当开发PL/SQL子程序时,既可以开发客户端的子程序,也可以开发服务器端的子程序。客户端子程序主要用在Develop中,而服务器端子程序可以用在任何应用程序中。通过将商业逻辑和企业规则集成到PL/SQL子程序中,可以简化客户端程序的开发和维护。
1)过程
过程用于执行特定操作。当执行过程时,既可以指定输入参数(IN)也可以指定输出参数(OUT)。通过在过程中使用输入参数,可以将应用环境的数据传递到执行部分;通过 使用输出参数,可以将执行部分的数据传递到应用环境。
例:
CREATE PROCEDURE update_sal(NAME VARCHAR2,newsal NUMBER)
IS
BEGIN
UPDATE emp SET sal = newal
WHERE lower(ename) = lower(NAME);
END;
/
2)函数
函数用于返回特定数据。函数头部必须包含RETURN子句,函数体内必须要包含RETURN语句返回数据。
例:
CREATE FUNCTION annual_income(NAME VARCHAR2)
RETURN NUMBER IS
annual_salary NUMBER(7,2);
BEGIN
SELECT sal*12+nvl(comm,0) INTO annual_salary
FROM emp WHERE lower(ename)=lower(NAME);
RETURN annual_salary
END;
/
3)包
包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成。包规范用于定义公用的常量、变量、过程和函数。
建立包规范:
CREATE PACKAGE