例4:利用游标变量创建包curvarpack。由于游标变量指是一个指针,其状态是不确定的,因此他不能随同包存储在数据库中,既不能再PL/SQL包中声明游标变量。但子啊包中可以创建游标变量参照类型,并可向包中的子程序传递游标变量参数。
create or replace package curvarpack as
type deptcurtype is ref cursor return dept%rowtype; --强类型定义
type curtype is ref cursor; --弱类型定义
procedure opendeptvar(cv in out deptcurtype,choice integer default 0,dept_no number default 50,dept_name varchar default'%');
end;
create or replace package body curvarpack as
procedure opendeptvar(cv in out deptcurtype,choice integer default 0,dept_no number default 50,dept_name varchar default'%')
is
begin
if choice=1 then
open cv for select * from dept where deptno<=dept_no;
elsif choice=2 then
open cv for select * from dept where dname like dept_name;
else
open cv for select * from dept;
end if;
end opendeptvar;
end curvarpack;
--定义一个过程
create or replace procedure opencurtype(cv in out curvarpack.curtype,tab char)
as
begin
--由于curvarpack.curtype采用弱类型定义,所以可以使用它定义的游标变量打开不同类型的查询语句
if tab='d' then
open cv for select * from dept;
else
open cv for select * from emp;
end if;
end opencurtype;
--定义一个应用
declare
deptrec dept%rowtyp;
emprec emp%rowtype;
cv1 curvarpack.deptcurtype;
cv2 curvarpack.curtype;
begin
dbms_output.put_line('游标变量强类型定义应用');
curvarpack.opendeptvar(cv1,1,30);
fetch cv1 into deptrec;
while cv1%found loop
dbms_output.put_line(deptrec.deptno||'--'||deptrec.dname);
fetch cv1 into deptrec;
end loop;
close cv1;
dbms_output.put_line('游标变量弱定义应用');
curvarpack.opendeptvar(cv2,2,dept_name=>'a%');
fetch cv2 into deptrec;
while cv2%found loop
dbms_output.put_line(deptrec.deptno||'--'||deptrec.dname);
fetch cv2 into deptrec;
end loop;
dbms_output.put_line('游标变量弱定义应用--dept表');
opencurtype(cv2,'d');
fetch cv2 into deptrec;
while cv2%found loop
dbms_output.put_line(deptrec.deptno||'--'||deptrec.dname);
fetch cv2 into deptrec;
end loop;
dbms_output.put_line('游标变量弱定义应用--emp表');
opencurtype(cv2,‘e’);
fetch cv2 into emprec;
while cv2%found loop
dbms_output.put_line(emprec.empno||'--'||emprec.ename);
fetch cv2 into emprec;
end loop;
close cv2;
end;
例5:子程序重载:PL/SQL允许对包内子程序和本地子程序进行重载。所谓重载是指两个或多个子程序有相同的名称,但拥有不同的参数变量、参数顺序或参数数据类型。
create or replace package demo_pack1
is
deptrec dept%rowtype;
v_sqlcode number;
v_sqlerr varchar2(2048);
function query_dept(dept_no in number) return integer;
function query_dept(dept_no in varchar2) return integer;
end demo_pack1;
create or replace package body demo_pack1
is
function check_dept(dept_no number)
return number
is
flag integer;
begin
select count(*) into flag from dept where deptno=dept_no;
if flag>0 then
return 1;
else
return 0;
end if;
end check_dept;
function check_dept(dept_no varchar2)
return number
is
flag integer;
begin
select count(*) into flag from dept where deptno=dept_no;
if flag>0 then
return 1;
else
return 0;
end if;
end check_dept;
function query_dept(dept_no in number)
return integer
is
begin
if check_dept(dept_no)=1 then
select * into deptrec from dept where deptno=dept_no;
return 1;
else
return 0;
end if;
end query_dept;
function query_dept(dept_no in varchar2)
return integer
is
begin
if check_dept(dept_no)=1 then
select * into deptrec from dept where deptno=dept_no;
return 1;
else
return 0;
end if;
end query_dept;
end demo_pack1;
删除包:可以使用drop package命令对不需要的包进行删除。
drop package demo_pack;
分享到:
相关推荐
以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
在本教程中,我们将深入探讨PL/SQL的基础知识,包括其与SQL的关系、程序设计的基本结构和组成元素。 ### SQL与PL/SQL SQL(Structured Query Language)是用于管理关系数据库的标准语言,主要负责数据查询、更新和...
PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...
此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型转换、程序设计指导原则、合并数据库中的数据行(MERGE)、约束、索引、子查询、分页技术等高级主题。 最后,还有关于字符串、数值、...
这本“PL/SQL超级笔记”显然是针对初学者设计的,旨在帮助他们掌握这一强大的数据库编程工具。 PL/SQL的组成部分包括声明部分、执行部分和异常处理部分。声明部分用于定义变量、常量、游标等;执行部分包含SQL语句...
PL/SQL程序通常由以下几部分组成: 1. **声明部分**:用于声明变量、常量等。 2. **执行部分**:包含具体的执行逻辑,如SQL语句和其他过程化语句。 3. **异常处理部分**:用于捕获并处理可能发生的错误或异常情况。...
### 精通Oracle 10g PL/SQL编程学习笔记 #### 一、PL/SQL综述 **1.1 PL/SQL的功能与作用** PL/SQL (Procedural Language for SQL) 是一种专门为Oracle数据库设计的过程化语言,它结合了SQL的数据处理能力与过程化...
这些笔记涵盖了SQL和PL/SQL的基础知识,适合初学者了解和掌握数据库操作的基本概念和语法。随着经验的积累,开发者可以深入学习高级特性和最佳实践,如性能优化、并发控制、数据库设计等,以提升在Oracle数据库环境...
1.2 PL/SQL程序结构 一个基本的PL/SQL块通常包含以下部分: - DECLARE:声明部分,用于定义变量、常量和游标等。 - BEGIN:执行部分,放置执行的语句,如SQL语句和过程调用。 - EXCEPTION:异常处理部分,用于捕获...
本文将深入探讨PL/SQL程序设计中的一些关键知识点,包括基本语法、记录类型、流程控制、游标使用、异常处理、存储函数与存储过程以及触发器。 1. PL/SQL基本语法: PL/SQL程序由声明、执行和异常处理三部分组成。...
这篇学习笔记主要关注如何在Oracle数据库中使用PL/SQL的FORALL语句进行批量操作,以及如何利用批绑定(Bulk Binding)来提升性能。此外,笔记还涵盖了存储过程中的参数传递,特别是传入数组的方法,以及SQL优化的...
此外,通过将业务逻辑封装在PL/SQL子程序中,可以实现模块化的程序设计,使得代码更易于维护和复用。例如,可以创建一个过程或函数来处理特定的业务规则,然后在多个地方调用这个子程序。 PL/SQL还提供了异常处理...
- **PL/SQL** (Procedural Language for SQL) 是 Oracle 数据库的一种扩展,它允许用户在 SQL 的基础上进行更复杂的程序设计。 - **特性**: - **变量与常量定义**:支持变量和常量的定义,增强数据处理能力。 - *...
PL/SQL程序由声明部分、执行部分和异常处理部分组成。基本的PL/SQL块结构如下: DECLARE -- 声明部分: 声明变量、类型、游标和局部存储过程或函数 BEGIN -- 执行部分: 包含程序主体,包括过程和SQL语句 EXCEPTION...
**PL/SQL程序设计简介** PL/SQL是Oracle数据库中的一种结构化查询语言,它将SQL与过程式编程语言相结合,提供了更强大的数据库操作能力。本笔记版详细介绍了PL/SQL的设计与应用,适合初学者及有一定基础的开发者...
Oracle SQL编程是数据库管理的重要组成部分,特别是在Oracle数据库系统中,SQL与PL/...学习和熟练掌握这些Oracle SQL和PL/SQL的基本概念和技术,将有助于你有效地管理Oracle数据库,编写高效、安全的数据库应用程序。
开发PL/SQL程序通常需要使用特定的开发工具。SQL*Plus是Oracle提供的一种命令行工具,适合基础的PL/SQL开发,例如创建存储过程或显示错误信息。而PL/SQL Developer是一款更高级的集成开发环境(IDE),提供了更丰富...