您的位置:首页 > 数据库 > Oracle

调用Oracle存储过程返回结果集

2009-07-03 09:18 330 查看
--1、Oracle存储过程建立
connect system/manager@dbserver;

--1.1、先建包

CREATE OR REPLACE PACKAGE pkg_landwind
AS
TYPE myrctype IS REF CURSOR;
END;
/
grant execute on PKG_LANDWIND to role_examrpt;

--1.2、建存储过程,本例是把过程建在包外

create or replace procedure
cs_get_apply_dataset(
iv_app_no in varchar2, --申请单号
outset out system.pkg_landwind.myrctype) is
ls_sql varchar2(2000);
begin
ls_sql:='
select a.exam_no,a.exam_class,a.exam_sub_class,
b.exam_item_no,b.exam_item
from exam.exam_appoints a,exam.exam_items b
where a.exam_no=b.exam_no and
a.exam_no=:iv_app_no';
OPEN outset FOR ls_sql USING iv_app_no;
end;
/
grant execute on cs_get_apply_dataset to role_examrpt;
DROP PUBLIC SYNONYM CS_GET_APPLY_DATASET ;
CREATE PUBLIC SYNONYM CS_GET_APPLY_DATASET FOR SYSTEM.CS_GET_APPLY_DATASET;

--2、PB下的调用方法
调用方式一、新建数据窗口,data source选stored procedure,......
调用方式二、PowerScript脚本下调用:
//声明
string ls_tmp //申请单号
string ls_exam_no[],ls_exam_class[],ls_exam_sub_class[],ls_exam_item[]
integer li_exam_item_no[],i=1
DECLARE prc_tmp PROCEDURE FOR SYSTEM.CS_GET_APPLY_DATASET (:ls_tmp);
//执行
execute prc_tmp;
//取数据,参数要与过程中的SQL指定的列相匹配
do
fetch prc_tmp into :ls_exam_no[i],:ls_exam_class[i],:ls_exam_sub_class[i],:li_exam_item_no[i],:ls_exam_item[i];
i ++
loop while sqlca.sqlcode=0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: