oracle两种方式创建的(包)存储过程,在PB(Powerbuilder)创建数据窗口数据源为存储过程时为什么看不到其中的一个存储过程,只能看到另一个。
如下:
-- Create example table
==============================================================================
drop table work_orders
/
create table work_orders (
company varchar2(3),
order_no varchar2(10),
order_date date)
/
insert into work_orders values ('ABC','1000', to_date('1999/03/05','yyyy/mm/dd'))
/
insert into work_orders values ('ABC','1001', to_date('1999/03/07','yyyy/mm/dd'))
/
insert into work_orders values ('ABC','1002', to_date('1999/03/06','yyyy/mm/dd'))
/
insert into work_orders values ('BCD','1002', to_date('1999/03/06','yyyy/mm/dd'))
/
insert into work_orders values ('BCD','1005', to_date('1999/03/15','yyyy/mm/dd'))
/
commit
/
-- 方法一:
1.先创建包头及参数的声明(如游标类型、记录类型、基本类型等),但是并没有声明要实现的存储过程、函数,而是单独再另外创建一个独立的存储过程,而不是在包体中实现存储过程。这种方式在PB11中创建数据源时可以看到该存储过程。
============================================================================== -- 1.Similar example, but now using one retrieval argument -- Create Package. Name: a_demo2(有输入参数) -- ============================================================================== CREATE OR REPLACE PACKAGE a_demo2 IS
TYPE my_result_set IS REF CURSOR RETURN work_orders%ROWTYPE;
END a_demo2; / -- Create Procedure. Name: proc_demo2 -- References package a_demo2 -- ============================================================================== CREATE OR REPLACE PROCEDURE proc_demo2 (as_comp IN VARCHAR2, out_result IN OUT a_demo2.my_result_set) AS BEGIN -- return result to datawindow OPEN out_result FOR SELECT * FROM work_orders WHERE company = as_comp; END proc_demo2;
/
--方法二:
2.在包头中声明要实现的存储过程,并在包体中实现包头中声明的存储过程 。但是PB选择数据源为存储过程是,却找不到此存储过程.为什么??
/**********************************************************************************/ -- Create Package. Name: a_demo4 -- ============================================================================== CREATE OR REPLACE PACKAGE a_demo4 IS TYPE my_result_set IS REF CURSOR RETURN work_orders%ROWTYPE;
PROCEDURE proc_demo4 (as_comp IN VARCHAR2, out_result IN OUT a_demo4.my_result_set);
END a_demo4; /
CREATE OR REPLACE PACKAGE BODY a_demo4 IS
PROCEDURE proc_demo4 (as_comp IN VARCHAR2, out_result IN OUT a_demo4.my_result_set) IS
BEGIN -- return result to datawindow OPEN out_result FOR SELECT * FROM work_orders WHERE company = as_comp; END proc_demo4; END a_demo4;
/
方法一创建的存储过程,在PB数据窗口选择数据源为存储过程时,是可以找到存储过程的,但是方法二创建的却找不到,为什么,请各位详细指导一下。急急!