ORACLE:如何使用in和out参数调用存储过程
我在Oracle中有一个StoredProcedure,其中有一个in参数和一个our参数游标 该程序定义如下:ORACLE:如何使用in和out参数调用存储过程,oracle,delphi,Oracle,Delphi,我在Oracle中有一个StoredProcedure,其中有一个in参数和一个our参数游标 该程序定义如下: PROCEDURE GetAccessObjects2(ALotteryID IN VARCHAR2, AAccessObjects OUT CURSOR_TYPE) AS BEGIN OPEN AAccessObjects FOR SELECT AccessObjectID, AccessObjectName FROM AccessObjects; EN
PROCEDURE GetAccessObjects2(ALotteryID IN VARCHAR2, AAccessObjects OUT CURSOR_TYPE) AS
BEGIN
OPEN AAccessObjects FOR
SELECT AccessObjectID, AccessObjectName
FROM AccessObjects;
END;
然后我试着从Delphi调用它:
procedure TForm7.Button1Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
Connection := ADOConnection1;
CursorType := ctOpenForwardOnly;
MaxRecords := 5000;
ProcedureName := 'DDK.GetAccessObjects2';
with Parameters.AddParameter do
begin
Name := 'ALotteryID';
DataType := ftString;
Value := 'TEST';
end;
end;
ADOStoredProc1.Open;
end;
但我有一个例外:
ORA-06550:第1行第7列:PLS-00306:错误的编号或类型
调用“GETACCESSOBJECTS2”ORA-06550的参数:第1行第7列:
PL/SQL:忽略语句
PS:ADOConnection1是到数据库的有效连接
据介绍,没有必要为光标AAccessObjects定义参数,但oracle不这么认为
简而言之,如何使用ADO从Delphi调用SP
更新
我已尝试为游标ad提供一个参数:
with ADOStoredProc1 do
begin
Connection := ADOConnection1;
CursorType := ctOpenForwardOnly;
MaxRecords := 5000;
ProcedureName := 'DDK.GetAccessObjects2';
Parameters.CreateParameter('ALotteryID', ftString, pdInput, 255, 'TEST');
Parameters.CreateParameter('AAccessObjects', ftCursor, pdOutput, 0, null);
end;
ADOStoredProc1.Open;
但我在ADO内部得到一个异常:
参数对象定义不正确
试试这个:
ParamType := ptOutput
不确定Oracle中游标类型的数据类型。您是否尝试在设置过程重命名后调用ADOStoredProc1.Parameters.Refresh,然后直接在不使用AddParameter的情况下设置ALotteryID参数值。.Refresh应返回服务器上准备使用的参数。否。稍后我会尝试。在哪里定义Access ObjistNord?这是数据库中一个表中要考虑的一个字段,游标可以是服务器端或客户端。如果参数为out,则表示服务器端游标,但ADO可能需要客户端游标。我不知道这是事实——这只是一个想法。如果是这种情况,我想cursor参数应该是in-out。不幸的是,我不知道Oracle中的cursor\u类型。但我知道有一个ptOutput参数类型。我曾在其他数据库中使用过它。我怀疑您的建议是将光标作为参数传递,但OP中的链接表明这是错误的。@Dsm如果这样做,我会在ADO驱动程序中遇到一个异常:参数对象定义不正确。我相信解决方案将切换到ODAC