第一章 PL/SQL介绍
1.为什么使用PL/SQL
PL/SQL和SQL结合紧密,二者使用相同的数据类型。PL/SQL使用更少的代码并具有更快的执行速度
PL/SQL简化了应用程序的逻辑到数据库层的转移,可以增加代码重用(code reusable)和减少网络通信(network traffic),同时由于代码采用原声编译(natively compiled),从而获得了更快的执行速度
PL/SQL可以轻松的实现跨平台(由于Oracle数据库可以跨平台)
2.PL/SQL不适用的场景
当代码需要在不同的数据库系统运行,如使用DB2,Sybase等数据库产品,PL/SQL显然不是一个很好的选择(Java is better)
当终端用户需要直接调用接口时,尽量避免使用PL/SQL
3.PL/SQL的基本结构
PL/SQL是块结构的语言
一个典型的PL/SQL块应该包含一个声明部分,一个可执行部分和一个异常处理部分
声明部分是可选的,可执行部分必须介于Begin语句和End语句之间,以英文半角分号结束,异常处理部分也是可选的,但强烈建议使用异常处理
- declare
- v_rate NUMBER;
- v_threshould NUMBER := 100.00;
-
v_increase_flag BOOLEAN := false;
-
begin
-
select rate into v_rate from rate_table
-
where rate_type = 'Monthly'
-
and effective_date = trunc(sysdate);
-
-
if(v_rate < v_threshould) then
-
v_increase_flag := true;
-
end if;
-
-
if(v_inscrease_flag) then
-
update rate_table set rate := rate + 2.5 * rate
-
where rate_type = 'Monthly'
-
and effective_date = trunc(sysdate);
-
commit;
-
end if;
-
exception when no_data_found then
-
dbms_output.put_line('Rate is not available');
-
when others then
-
dbms_output.put_line('Server error');
- dbms_output.put_line(sqlerrm);
-
end;
- /
declare
v_rate NUMBER;
v_threshould NUMBER := 100.00;
v_increase_flag BOOLEAN := false;
begin
select rate into v_rate from rate_table
where rate_type = 'Monthly'
and effective_date = trunc(sysdate);
if(v_rate < v_threshould) then
v_increase_flag := true;
end if;
if(v_inscrease_flag) then
update rate_table set rate := rate + 2.5 * rate
where rate_type = 'Monthly'
and effective_date = trunc(sysdate);
commit;
end if;
exception when no_data_found then
dbms_output.put_line('Rate is not available');
when others then
dbms_output.put_line('Server error');
dbms_output.put_line(sqlerrm);
end;
/
上面为一个PL/SQL最基本的程序结构,这个PL/SQL块同时可以嵌入到存储过程中
- create or replcae procedure p_process_rate(
-
ip_rate_type in rate_table.rate_type%type,
-
ip_effective_date in rate_table.effective_date%type,
-
ip_threshould in number,
-
op_rate out number,
-
op_success out varchar2,
-
op_errmsg out varchar2)
-
is
- v_rate number;
-
v_increase_flag boolean := false;
-
begin
-
select rate into v_rate from rate_table
-
where rate_type = ip_rate_type
-
and effective_date = ip_effective_date;
-
-
if(v_rate < ip_threshould) then
-
v_increase_flag := true;
-
end if;
-
-
if(v_increase_flag) then
-
update rate_table set rate := rate + 2.5 * rate
-
where rate_type = ip_rate_type
-
and effective_date = ip_effective_date
-
returning rate into v_rate;
-
commit;
-
end if;
-
- op_rate := v_rate;
-
op_success := 'Y';
-
-
exception when no_data_found then
-
op_rate := null;
-
op_success := 'N';
-
op_errmsg := 'Rate is not availabe ';
-
when others then
-
op_rate := null;
-
op_success := 'N';
-
op_errmsg := 'Server error' || chr(10) || chr(13) || SQLERRM;
-
end;
- /
create or replcae procedure p_process_rate(
ip_rate_type in rate_table.rate_type%type,
ip_effective_date in rate_table.effective_date%type,
ip_threshould in number,
op_rate out number,
op_success out varchar2,
op_errmsg out varchar2)
is
v_rate number;
v_increase_flag boolean := false;
begin
select rate into v_rate from rate_table
where rate_type = ip_rate_type
and effective_date = ip_effective_date;
if(v_rate < ip_threshould) then
v_increase_flag := true;
end if;
if(v_increase_flag) then
update rate_table set rate := rate + 2.5 * rate
where rate_type = ip_rate_type
and effective_date = ip_effective_date
returning rate into v_rate;
commit;
end if;
op_rate := v_rate;
op_success := 'Y';
exception when no_data_found then
op_rate := null;
op_success := 'N';
op_errmsg := 'Rate is not availabe ';
when others then
op_rate := null;
op_success := 'N';
op_errmsg := 'Server error' || chr(10) || chr(13) || SQLERRM;
end;
/
其中in表示输入参数,out表示输出参数
- declare
- v_rate number;
- v_success_flag varchar2(1);
- v_errmsg varchar2(1000);
-
begin
-
p_process_rate('Monthly',trunc(sysdate), 100.00,
- v_rate, v_success_flag, v_errmsg);
-
-
if(v_success_flag != 'Y') then
-
dbms_output.put_line('Procedure p_process_rate failed with error(s) as follows');
- dbms_output.put_line(v_errmsg);
-
end if;
-
end;
- /
declare
v_rate number;
v_success_flag varchar2(1);
v_errmsg varchar2(1000);
begin
p_process_rate('Monthly',trunc(sysdate), 100.00,
v_rate, v_success_flag, v_errmsg);
if(v_success_flag != 'Y') then
dbms_output.put_line('Procedure p_process_rate failed with error(s) as follows');
dbms_output.put_line(v_errmsg);
end if;
end;
/
上述代码调用了存储过程p_process_rate
分享到:
相关推荐
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括...这本书籍将为读者提供一个全面、系统的学习路径,帮助数据库管理员、开发人员深入理解并掌握ORACLE PL/SQL的强大功能和应用技巧。
以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...
PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...
PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...
在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...
Oracle SQL和PL/SQL是数据库管理和编程的重要工具,主要用于...这些笔记提供了学习SQL和Oracle数据库操作的基本框架,对于初学者来说是非常有价值的资源。通过实践和深入学习,可以掌握更复杂的查询技巧和PL/SQL编程。
总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...
### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...
在PL/SQL的学习中,分区是数据库管理大型数据集的一种高效方法,特别是在处理大数据量时。本篇笔记主要探讨了何时应该使用分区以及Oracle支持的分区类型。 首先,当面对超过2GB的大数据表时,分区是十分必要的。这...
本文将深入探讨从"SQL,PL/SQL学习笔记"中提取的关键知识点,帮助编程人员更好地理解和运用这两种语言。 首先,我们关注SQL并行查询。通过`ALTER SESSION ENABLE PARALLEL DMl`,我们可以开启会话的并行DML操作,这...
根据提供的文件信息,我们可以将其中的关键知识点归纳如下: ### 1. 创建无参数的Procedure(过程) 在Oracle PL/SQL中,创建一个无参数的过程(Procedure)是...这些内容为深入学习Oracle PL/SQL打下了坚实的基础。
### PL/SQL 学习笔记知识点详解 #### 1. PL/SQL 基本结构 - **DECLARE**: 在此部分声明变量、常量、数据类型及游标。 - **BEGIN**: 主程序体开始,可以包含任何合法的PL/SQL语句。 - **EXCEPTION**: 异常处理部分,...
PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种扩展语言,用于处理数据库中的数据和实现复杂的业务逻辑。以下是对PL/SQL的基础知识进行的详细阐述: 1. **匿名块与命名块**: ...
从给定的Oracle PL-SQL学习笔记中,我们可以提炼出一系列关键的知识点,涉及PL-SQL的基本语法、变量声明与赋值、数据类型、表操作、记录与集合处理等核心概念。下面将对这些知识点进行详细阐述: ### 1. 变量声明与...