日期:2014-05-17  浏览次数:20984 次

调用oracle存储过程的问题
存储过程如下: 
create or replace package Tools 
is 
  type ResultData is ref cursor; 
  procedure sp_Page(p_OutCursor out ResultData); 
end Tools; 

create or replace package body Tools 
is 
  procedure sp_Page(p_OutCursor out ResultData) 
  as 
  begin 
  v_sql := 'select * from tablename' 
  OPEN p_OutCursor FOR v_sql; 
  end sp_Page; 
end Tools; 
在asp中调用: 
 Set RS = Server.CreateObject( ADODB.RecordSet ) 
 Set CMD = Server.CreateObject( ADODB.Command ) '建立对象 
  SQLstr = {CALL Tools.sp_page({resultset 100,p_OutCursor})} 
 CMD.ActiveConnection = Con ‘建立CMD对象与Con的联系。con的代码省略 
  CMD.CommandType = 4 
 CMD.CommandText = SQLstr ‘指定Command对象的执行字符串。 
  SET RS=CMD.Execute() 
  do while not Rs.eof 
  response.write(rs("字段名")) 
  Rs.movenext 
  loop 
我知道这样是错的,可不知道要怎么写,请大家帮帮忙。

------解决方案--------------------
asp 调用 oracle存储过程并返回结果集 

看过网上好多asp调用oracle的方法,但是没有特好特直接的东西,所以总结各家的东西最后得出的一个自己需要的方法,感觉也比较大众所以特此发布 

SQL code
################################################### 
oracle的存储过程 
################################################### 

--创建包头 
create or replace package pck_as 
as 
type t_product_id is table of number 
index by binary_integer; 
type t_serial_no is table of varchar(300) 
index by binary_integer; 
type t_buy_date is table of date 
index by binary_integer; 

procedure allsfc 
( 
product_id out t_product_id, 
serial_no out t_serial_no, 
buy_date out t_buy_date 
); 

--procedure allsfc1; 
end pck_as; 


--创建包体 
create or replace package body pck_as 
as 
procedure allsfc 
( 
product_id out t_product_id, 
serial_no out t_serial_no, 
buy_date out t_buy_date 
) 
is 
cursor cur_sfc_tbl_product_reg is 
select product_id,serial_no,buy_date from sfc_tbl_product_reg; 

i number default 1; 

begin 
for onrecord in cur_sfc_tbl_product_reg 
loop 
product_id(i) := onrecord.product_id; 
serial_no(i) := onrecord.serial_no; 
buy_date(i) := onrecord.buy_date; 
i := i + 1; 
end loop; 
end; 
end;