oracle 的存储过程不能像sql server一样在存储过程执行后返回结果集合?

刘大黑 2003-06-25 08:58:13
以前在sql server报表计算一般都是通过存储过程完成的,但是到了ORACLE里面无法使用存储过程计算报表了,请问大家这个问题是如何解决的?
...全文
36 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘大黑 2003-07-01
  • 打赏
  • 举报
回复
这样调用,好像不行阿?

DECLARE p_rc pkg_test.myrctype ;
BEGIN
pkg_test.getdata(p_rc);
FOR rec_inv in PKG_TEST.p_rc loop
dbms_output.PUT_LINE(rec_inv.PROD_SPEC_ID||rec_inv.PROD_SPECIFICATION);
END loop;
END;
dxxfun 2003-06-30
  • 打赏
  • 举报
回复
我也要详细代码,最好是VBS的谢谢
EMAIL:dengxx@gentle.com.cn
jekie 2003-06-30
  • 打赏
  • 举报
回复
beckhambobo(beckham) :你的ADO引擎是Microsoft OLE DB Provider for Oracle吗?如果换成Oracle OLE DB Provider不知道行不行?
VCBoyGirl 2003-06-29
  • 打赏
  • 举报
回复
beckhambobo(beckham):我的邮箱是wmzsoft@hotmail.com,请发一份给我。谢谢
VCBoyGirl 2003-06-28
  • 打赏
  • 举报
回复
在DELPHI中调用时,显示错误信息:“参数数量或参数类型不一至”
darkhorsedba 2003-06-28
  • 打赏
  • 举报
回复
你用的是PB?Delphi?有信箱吗?方便的话留一个!给你详细的代码!
zdzconquer 2003-06-28
  • 打赏
  • 举报
回复
ORACLE中拥有大类的数据字典,它也在不同程序传递结果的主要方法,为控制使用的安全性,最好不用动态SQL,提前建立临时表,便可以了,这也是ORACLE推荐作法
sunshine008 2003-06-28
  • 打赏
  • 举报
回复
我觉得不一定非要让ORACLE也和SQL SERVER一样有集合返回,如果用动态SQL的话也不好,不如创建个表,把你想要的放进去不就OK了。
beckhambobo 2003-06-27
  • 打赏
  • 举报
回复
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
END pkg_test;
/

create or replace PROCEDURE get(p_id in varchar2,p_rc OUT pkg_test.myrctype)
IS
sqlstr VARCHAR2 (50);
BEGIN
sqlstr:='select * from aa where id>='||p_id;
OPEN p_rc FOR sqlstr;
END get;
/

SQL> select * from aa;

ID NAME
---------- --------
1 猪八戒
2 孙悟空

procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
Close;
procedurename:='get';
Parameters.CreateParameter('p_id',ftstring,Pdinput,20,'1');
parameters[0].Name:='p_id';
//Parameters[0].Value:='3';
Open;
label1.caption:= ADOStoredProc1.fields[1].asstring;
while not adostoredproc1.eof do
begin
label2.caption:= ADOStoredProc1.fields[1].asstring;
adostoredproc1.Next;
end;

end;
end;
beckhambobo 2003-06-27
  • 打赏
  • 举报
回复
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
END pkg_test;
/

create or replace PROCEDURE get(p_id in varchar2,p_rc OUT pkg_test.myrctype)
IS
sqlstr VARCHAR2 (50);
BEGIN
sqlstr:='select * from aa where id>='||p_id;
OPEN p_rc FOR sqlstr;
END get;
/

SQL> select * from aa;

ID NAME
---------- --------
1 猪八戒
2 孙悟空

procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
Close;
procedurename:='get';
Parameters.CreateParameter('p_id',ftstring,Pdinput,20,'1');
parameters[0].Name:='p_id';
//Parameters[0].Value:='3';
Open;
end;
end;
VCBoyGirl 2003-06-27
  • 打赏
  • 举报
回复
请问 beckhambobo(beckham) 你写这个包怎样在DELPHI中调用呀?参数怎么传,怎么处理返回的结果集呀?
beckhambobo 2003-06-26
  • 打赏
  • 举报
回复
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;

PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
END pkg_test;
/

CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
SELECT ID, NAME, sex, address, postcode, birthday
FROM student;
ELSE
sqlstr :=
'select id,name,sex,address,postcode,birthday
from student where id=:w_id';
OPEN p_rc FOR sqlstr USING p_id;
END IF;
END get;
END pkg_test;
/
拓狼 2003-06-26
  • 打赏
  • 举报
回复
可以,需要用到动态SQL
hammer_shi 2003-06-25
  • 打赏
  • 举报
回复
一样处理呀

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧