那位高人真正会DELPHI的QUERY调用ORACLE的存储过程?(代过程)

lishen 2004-12-23 12:04:03
--表建立
CREATE TABLE "UNAME"."student"("ID" NUMBER(10) NOT NULL, "NAME"
VARCHAR2(30) NOT NULL, "SEX" VARCHAR2(2) NOT NULL, "ADDRESS"
VARCHAR2(50) NOT NULL, "POSTCODE" VARCHAR2(10) NOT NULL,
"BIRTHDAY" VARCHAR2(20) NOT NULL)
TABLESPACE "SPNAME" ;

CREATE TABLE student("ID" NUMBER(10) NOT NULL, "NAME"
VARCHAR2(30) NOT NULL, "SEX" VARCHAR2(2) NOT NULL, "ADDRESS"
VARCHAR2(50) NOT NULL, "POSTCODE" VARCHAR2(10) NOT NULL,
"BIRTHDAY" VARCHAR2(20) NOT NULL)



--过程建立

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;
/
...全文
128 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishen 2004-12-23
  • 打赏
  • 举报
回复
upupup
lishen 2004-12-23
  • 打赏
  • 举报
回复
IORILI(眼镜) ( ) 信誉:115
prGetPersonPay得到的是游标如何处理??????????????????????
lishen 2004-12-23
  • 打赏
  • 举报
回复
为什么SQL SERVER就可以呢?ORACLE 太弱了?根本无法调试,根本无法获得游标结果?????
lishen 2004-12-23
  • 打赏
  • 举报
回复
为什么SQL SERVER就可以呢?ORACLE 太弱了?根本无法调试,根本无法获得游标结果?????
hellolongbin 2004-12-23
  • 打赏
  • 举报
回复
楼上,存储过程不是这么调用滴,楼上的楼上是正确的
lishen 2004-12-23
  • 打赏
  • 举报
回复
lzp_lrp(lzp) ( ) 信誉:100

我这样作的但报错:
Query1.SQL.Clear;
Query1.SQL.add('exec pkg_test.get(0);');
Query1.ExecSQL;
IORILI 2004-12-23
  • 打赏
  • 举报
回复
//对存储过程参数付值

strYear := strGetYear;
intPeriod := intGetPeriod;
intPeriodState := intGetPeriodState;

//当进入界面时,需要调用GetPersonPayTable这个存储过程,而,当所得税计算时就不需要这个存储.
//用Form.tag 判断 form.tag = 2 那么 表示已经进入界面了; form.tag = 0 那么 表示刚进入界面状态
if intPeriod>=GetPeriod then // 李绍龙 2004-03-19 增加,
if Self.Tag = 0 then
begin

with prGetPersonPay do
begin
connection := Sys_FDm.ADOConnection;

Parameters.ParamByName('STRYEAR').Value := strYear;
Parameters.ParamByName('INTPERIOD').Value := intPeriod;
Parameters.ParamByName('INTPERIODSTATE').Value := intPeriodState;//LoginYear; // 需要从全局变量中读取
ExecProc;
end;
end;
WorldMobile 2004-12-23
  • 打赏
  • 举报
回复
你直接执行就行了,我们也是这么用的,有什么问题么?

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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