--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