如何在SQL*PLUS 中调用ORacle的存储过程???以及在delphi的query中如何调用!!

lishen 2003-08-20 03:13:21
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;
/


...全文
63 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
JCC0128 2003-09-09
  • 打赏
  • 举报
回复
学习
lishen 2003-08-21
  • 打赏
  • 举报
回复
beckhambobo(beckham)

error 报的什么命令未结束...

还是不对
beckhambobo 2003-08-20
  • 打赏
  • 举报
回复
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select * from get()');
adoquery1.open;
lishen 2003-08-20
  • 打赏
  • 举报
回复
不用proc组件!
query或是三层结构所用的ClientDataSet1.commandtext:='sql';
sql为拼写的字符串格式!
那位高手知道????????
beckhambobo 2003-08-20
  • 打赏
  • 举报
回复
SQL> select * from aa;

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


CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
END pkg_test;
/

create or replace PROCEDURE get(p_rc OUT pkg_test.myrctype)
IS
sqlstr VARCHAR2 (50);
BEGIN
sqlstr:='select * from aa';
OPEN p_rc FOR sqlstr;
END get;
/

在delphi中:
在窗体上放一个ADOStoredproc
设置 procedurename=get
prepared = true
active = true
还有 connectstring
代码如下,好运!

procedure TForm1.Button1Click(Sender: TObject);
begin
adostoredproc1.close;
adostoredproc1.open;
label1.caption:= ADOStoredProc1.fields[1].asstring;
while not adostoredproc1.eof do
begin
label2.caption:= ADOStoredProc1.fields[1].asstring;
adostoredproc1.Next;
end;
end;
lishen 2003-08-20
  • 打赏
  • 举报
回复
不管用!!!!!!
asdf008 2003-08-20
  • 打赏
  • 举报
回复
对于delphi,在TQuery的SQL里面写
EXEC 存储过程名(参数)
就可以了
lishen 2003-08-20
  • 打赏
  • 举报
回复
6 /
str := pkg_test.get('aa',ff) ;
*
ERROR 位于第 4 行:
ORA-06550: 第 4 行, 第 32 列:
PLS-00201: 必须说明标识符 'FF'
ORA-06550: 第 4 行, 第 7 列:
PL/SQL: Statement ignored

FF应该定义为什么类型?如何写定义语句?


在DELPHI中我不用proc组件,编程不方便!必须是query或是三层结构所用的ClientDataSet1.commandtext:='sql';
sql为拼写的字符串格式!
LGQDUCKY 2003-08-20
  • 打赏
  • 举报
回复
SQL*PLUS 中调用ORacle的存储过程,
sql>declare
sql> str varchar2(20);
sql>begin
str := pkg_test.get('aa',ff) ;
sql>end;
以及在delphi的调用!!
用这个StoredProc控件调用。


lishen 2003-08-20
  • 打赏
  • 举报
回复
我不用
proc组件,编程不方便!必须是query或是三层结构所用的ClientDataSet1.commandtext:='sql';
sql为拼写的字符串格式!
lishen 2003-08-20
  • 打赏
  • 举报
回复
能帮忙看看我的存储过程如何调用吗?我是新手!!多多费心了!
kerisyml 2003-08-20
  • 打赏
  • 举报
回复
在delphi中,防止一个TStoredProc控件,连接数据库中的存储过程,再传给输入参数值就OK了
ProcPLYS.close;
ProcPLYS.Params[0].AsString :=ysn+ysy ;
ProcPLYS.Params[1].AsString :=ysns+ysys ;
ProcPLYS.ExecProc ;
kerisyml 2003-08-20
  • 打赏
  • 举报
回复
在SQL/PLUS中调用存储过程,显示结果:
SQL>set serveoutput on
SQL>var info1 number; --输出1
SQL>var info2 number; --输出2
SQL>declare
var1 varchar2(20); --输入1
var2 varchar2(20); --输入2
var3 varchar2(20); --输入2
BEGIN
pro(var1,var2,var3,:info1,:info2);
END;
/
SQL>print info1;
SQL>print info2;

17,086

社区成员

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

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