这是一个PKG 包头:
create or replace package Testpkg IS
TYPE T_CURSOR IS REF CURSOR;
Procedure fn_getRecord(Re_cursor Out T_CURSOR ,strCompanyName Varchar2,strDate Varchar2);
Procedure Get_ComanyName(Re_cursor Out T_CURSOR );
End ; 这里是包体:
create or replace package body Testpkg Is
--------------------------------------------------------------------------------------fn_getRecord
Procedure fn_getRecord(Re_cursor Out T_CURSOR ,strCompanyName Varchar2,strDate Varchar2)
IS
V_CURSOR T_CURSOR; str Varchar2(500):='';
Begin
///这里怎么从Get_ComanyName返回的记录集里面查找到 公司编号='20081234'
testpkg.get_comanyname(V_CURSOR);
--Select * From V_CURSOR;
Re_cursor:=V_CURSOR;
commit;
End ;
------------------------------------------------------------获取公司名
Procedure Get_ComanyName(Re_cursor Out T_CURSOR )
IS
V_CURSOR T_CURSOR;
str Varchar2(500):='';
Begin str:='Select a.T$ncmp As 公司编号, a.T$dsca as 公司名称 From baan.ttccom000410 a' ;
OPEN V_CURSOR for str ;
Re_cursor:=V_CURSOR; End ;
------------------------------------------------------------------------End ; 请问,我如何在我注释的地方实现这个功能
///这里怎么从Get_ComanyName返回的记录集里面查找到 公司编号='20081234'
通常有select * from table001
我这里能不能也写成如这样的,select * from V_CURSOR ??
请大家帮忙一下,谢谢了。
create or replace package Testpkg IS
TYPE T_CURSOR IS REF CURSOR;
Procedure fn_getRecord(Re_cursor Out T_CURSOR ,strCompanyName Varchar2,strDate Varchar2);
Procedure Get_ComanyName(Re_cursor Out T_CURSOR );
End ; 这里是包体:
create or replace package body Testpkg Is
--------------------------------------------------------------------------------------fn_getRecord
Procedure fn_getRecord(Re_cursor Out T_CURSOR ,strCompanyName Varchar2,strDate Varchar2)
IS
V_CURSOR T_CURSOR; str Varchar2(500):='';
Begin
///这里怎么从Get_ComanyName返回的记录集里面查找到 公司编号='20081234'
testpkg.get_comanyname(V_CURSOR);
--Select * From V_CURSOR;
Re_cursor:=V_CURSOR;
commit;
End ;
------------------------------------------------------------获取公司名
Procedure Get_ComanyName(Re_cursor Out T_CURSOR )
IS
V_CURSOR T_CURSOR;
str Varchar2(500):='';
Begin str:='Select a.T$ncmp As 公司编号, a.T$dsca as 公司名称 From baan.ttccom000410 a' ;
OPEN V_CURSOR for str ;
Re_cursor:=V_CURSOR; End ;
------------------------------------------------------------------------End ; 请问,我如何在我注释的地方实现这个功能
///这里怎么从Get_ComanyName返回的记录集里面查找到 公司编号='20081234'
通常有select * from table001
我这里能不能也写成如这样的,select * from V_CURSOR ??
请大家帮忙一下,谢谢了。
定义一个行类型的变量
p_data table%rowtype;
定义一个游标
type p_cursor is ref cursor;
定义一个游标的引用
p_cc p_cursor;游标获取数据后
fetch p_cc into p_data;
取值
p_data.公司编号
LOOP
FETCH P_CC INTO P_DATA;
SELECT T.*,P_DATA.XX FROM TABLE T WHERE T.OO= P_DATA.00 AND T.01 = P_DATA.02
EXIT WHEN P_CC NOT FOUND
可以这样
LOOP
FETCH P_CC INTO P_DATA;
SELECT T.*,P_DATA.XX FROM TABLE T WHERE T.OO= P_DATA.00 AND T.01 = P_DATA.02
EXIT WHEN P_CC NOT FOUND
那是一条条的了table001,和recordset联合查询 查询条件是2个记录集里面的字段00,字段01都相等。
希望和从2个表里面查数据类似
selece a.字段00,a.字段01,a.字段12,a.字段13,a.字段14 ,b.字段02,b.字段03
from table001 a ,recordset b
where a.字段00=b.字段00 and a.字段01=b.字段01
查了别的资料,都说是要建立临时表。难道这样直接使用游标就不行吗?
但这个我没有用过
具体实现你可以在网上找一下资料可以参考一下这个实现
DECLARE TYPE emp_type IS RECORD
( emp_id employee_table.emp_id%TYPE,
emp_name employee_table.emp_name%TYPE,
emp_gender employee_table.emp_gender%TYPE ); TYPE emp_type_array IS TABLE OF
emp_type INDEX BY BINARY_INTEGER; emp_rec_array emp_type_array;
emp_rec emp_type; BEGIN
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara ';
emp_rec.emp_gender := 'Female '; emp_rec_array(1) := emp_rec; emp_rec.emp_id := 300000008;
emp_rec.emp_name := 'Rick ';
emp_rec.emp_gender := 'Male '; emp_rec_array(2) := emp_rec; FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE( 'i= ' ¦ ¦i
¦ ¦ ', emp_id = ' ¦ ¦emp_rec_array(i).emp_id
¦ ¦ ', emp_name = ' ¦ ¦emp_rec_array(i).emp_name
¦ ¦ ', emp_gender = ' ¦ ¦emp_rec_array(i).emp_gender);
END LOOP; END;
-------------- Result --------------
i=1, emp_id =300000000, emp_name =Barbara, emp_gender = Female
i=2, emp_id =300000008, emp_name =Rick, emp_gender = Male
你只需要把下面查询出的信息插入二维组中就可以了
-----
LOOP
FETCH P_CC INTO P_DATA;
SELECT T.*,P_DATA.XX FROM TABLE T WHERE T.OO= P_DATA.00 AND T.01 = P_DATA.02
EXIT WHEN P_CC NOT FOUND
---------create or replace procedure varry_test asTYPE emp_type IS RECORD (emp_id number,emp_name varchar2(100),emp_gender varchar(100));
TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER; emp_rec_array emp_type_array;
emp_rec emp_type; p_data emp%rowtype;
type my_cursor is ref cursor;
p_cc my_cursor;
p_count number;BEGIN
open p_cc for 'select t.id,t.name,t.salary from emp t';
p_count :=1;
loop
fetch p_cc into p_data;
exit when p_cc%notfound;
emp_rec.emp_id := p_data.id;
emp_rec.emp_name := p_data.name;
emp_rec.emp_gender := p_data.salary;
emp_rec_array(p_count) := emp_rec;
p_count := p_count+1;
end loop;
FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE('emp_id = ' || emp_rec_array(i).emp_id
|| ' emp_name = ' || emp_rec_array(i).emp_name
|| ' emp_gender = ' || emp_rec_array(i).emp_gender);
END LOOP;
END;