易截截图软件、单文件、免安装、纯绿色、仅160KB

PL/SQL游标变量的调用与作为输出参数的应用

      今天有个学生问我调用包里面具有游标类型的输出参数,可是在用PL/SQL程序调用的时候居然报出参数个数或类型错误的异常信息,于是自己也试了一下,果然是出错了。然后就自己琢磨了一下、查查资料和问问同事,原来问题是很简单的,先看一下程序的结构代码:
CREATE OR REPLACE PACKAGE Pkg_Student
IS
TYPE StudentType IS REF CURSOR RETURN TB_STUDENT%ROWTYPE;
PROCEDURE Pro_student
(
 pi_ClassId IN TB_STUDENT.CLASSID%TYPE,
 Po_student OUT StudentType
);
END Pkg_Student;
--实现包体代码
CREATE OR REPLACE PACKAGE BODY Pkg_Student
IS
PROCEDURE Pro_student
(
 pi_ClassId IN TB_STUDENT.CLASSID%TYPE,
 Po_student OUT StudentType
)
AS
BEGIN
  IF pi_ClassId=1 THEN
   OPEN Po_student FOR SELECT * from TB_STUDENT WHERE TB_STUDENT.CLASSID=1;
  ELSIF pi_ClassId=2 THEN
   OPEN Po_student FOR SELECT *from TB_STUDENT WHERE TB_STUDENT.CLASSID=2;
  ELSE
   OPEN Po_student FOR SELECT *from TB_STUDENT WHERE TB_STUDENT.CLASSID=3;
  END IF;
END;
END Pkg_Student;
--执行调用包里面的存储过程
DECLARE
 TYPE StudentType IS REF CURSOR RETURN TB_STUDENT%ROWTYPE;
 v_student StudentType;
 v_ClassID TB_STUDENT.CLASSID%TYPE:=1;
BEGIN
 Pkg_Student.Pro_student(v_ClassID,v_student);
END;
像上面那样执行就会出现参数个数或类型错误;于是,纠正了一下代码如下:
DECLARE
 v_student Pkg_Student.StudentType;
 v_ClassID TB_STUDENT.CLASSID%TYPE:=1;
BEGIN
 Pkg_Student.Pro_student(v_ClassID,v_student);
END;
原因如下:
   1、StudentType本身是在包里面声明和应用,其作用域也在包内部而已;
   2、若外部程序要调用包里面具有游标类型参数的过程或函数时,那么必须在外部显示调用包
          里面的游标声明,而不是在外面重新定义一个游标声明和游标变量。而且注意的是游标变量本身也是动态的,是一个引用类型,不依赖于工作区。
好了,对于这个问题的分析就到这边了.........希望对别人有帮助。(帮助他人就是帮助自己)


相关文档:

sql简单函数用法

定义函数
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER function [dbo].[FunJSLC](@carid bigint,@date datetime)
returns decimal
as
begin
declare @jslc decimal
set @jslc=(select JSLC from BYReMIn where iCarID=@carid and dtDate=@date)
return(@jslc)
end
存储过程应用函数
set ANSI_NULLS ......

sql server和oracle的区别

1.Oracle为客户端开启会话有两种方式:共享服务和专用服务。在专用服务情况下,监听器为连接请求创建新进程(Unix环境下是Process,Windows下我想应该是Thread吧);共享服务情况下,监听器将客户请求交给Dispatcher,由Dispatcher安排多客户的作业。SQL Server在默认情况下自动为客户端连接创建线程,当有非常多的客 ......

SQL 开发人员 Oracle Berkeley DB 指南(zz)

转载一个BDB的相关介绍,基本可以当速成手册用,更多的文档可以去Oracle官方网站下载。
SQL 开发人员 Oracle Berkeley DB 指南
作者:Margo Seltzer
Oracle Berkeley DB 中常用 SQL 函数使用指南。
2007 年 9 月发表
常常有人问 Oracle Berkeley DB “我如何在 Berkeley DB 中进行 <SQL 查询>?"因此,我们 ......

[摘抄/记录]MySQL导入/导出.sql文件

导出.sql文件
 
1.将数据库transfer_server_db导出到transfSRV.sql文件中:
mysqldump -u root -p transfer_server_db > /home/eric/transfSRV.sql
2.将数据库transfer_server_db中的device_info_table导出到table.sql文件中:
mysqldump -u root -p transfer_server_db device_info_table > /home/eric/ta ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号