问题一 :在delphi中我使用Tstoreproc 控件调用存储过程是可以的,但是使用TQuery控件的时候
有问题。我用的是oracle 8i,BDE里面的设置应该没问题。下面的是代码:CREATE OR REPLACE PACKAGE Typedefine IS
TYPE mytype IS RECORD
(LOTID             VARCHAR (40) ,
SHIFT             VARCHAR (2) ,
PRODUCTNAME       VARCHAR (40)  );
TYPE my_cursor IS REF CURSOR RETURN  mytype ;
END  ;
CREATE OR REPLACE PROCEDURE sdb_test
(enddate IN VARCHAR2,startdate IN VARCHAR2,
Eqpid IN VARCHAR2,my_cursor IN OUT Typedefine.my_cursor)
 IS
 BEGIN
 OPEN my_cursor  FOR
 SELECT lotid,shift,productname
 FROM
 temp_table 
 where shiftenddate=enddate
 and shiftstartdate=startdate
 ORDER BY txntimestamp  ;
 END ;delphi中的程序是:
var
P1,P2,P3,P4:TParam ;
begin
   Query1.Close ;
   Query1.ParamCheck :=False ;
   Query1.SQL.Clear ;   P1 := TParam.Create(Query1.Params, ptInput);
   P2 := TParam.Create(Query1.Params, ptInput);
   P3 := TParam.Create(Query1.Params, ptInput);
   P4 := TParam.Create(Query1.Params, ptInputOutput);   Query1.Params[0].datatype := ftString ;
   Query1.Params[1].datatype := ftString ;
   Query1.Params[2].datatype := ftString ;
   Query1.Params[3].datatype := ftCursor ;
     Query1.SQL.Add('BEGIN sdb_test(:P1,:P2,:P3,:P4) ; END ;') ;
     Query1.Params[0].AsString :='20021208' ;
     Query1.Params[1].AsString :='20021201' ;
     Query1.Params[2].AsString :='ABCD01' ;
   Query1.ExecSQL ;
 //  Query1.Open  ;
   P1.Free ;
   P2.free ;
   P3.free ;
   P4.free ;
end;
会报错,'can't find object ',应该就是不认识我设的参数 P1 P2 P3 ,
应该是我还是有不清楚的地方。
另,我用sqlplus 测试可以通过
variable v refcursor ;
execute sdb_test('20021208','20021201','ABCD01',:v) ;