delphi运行oracle得存储过程(doa)(急)需要一个简单的例子 delphi运行oracle得存储过程(doa)(急)需要一个简单的例子有懂得大哥联系我 1165553139或发帖子救命 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 create or replace procedure sp_test(a varchar2,b out varchar2) isbegin b:= 'hello '||a;end;//Provider=OraOLEDB.Oracle.1;Password=xxx;Persist Security Info=True;User ID=xxxx;Data Source=orclprocedure TForm1.Button1Click(Sender: TObject);beginself.ADOStoredProc1.ProcedureName:='sp_test';self.ADOStoredProc1.Prepared;self.ADOStoredProc1.Parameters.CreateParameter('a',ftString,pdInput,100,'lidexian');self.ADOStoredProc1.Parameters.CreateParameter('b',ftString,pdOutput,100,'');self.ADOStoredProc1.ExecProc;showmessage(self.ADOStoredProc1.Parameters.ParamByName('b').Value);end; 还在吗 我向要 doa连delphi 执行 存储过程的 有实际例子吗发我邮箱[email protected] 用Delphi开发C/S结构的Oracle数据库软件时,为提高效率,通常将大批量的数据处理交给后台存储过程来完成。由于Delphi需通过BDE才能操作和处理各种数据库文件,这样不仅效率低,而且存在一定局限性,所以考虑采用第三方工具DOA来提高交互效率,方便前后台信息的传递。 DOA(即Direct Oracle Access的缩写)是荷兰Allround Automations公司开发的访问Oracle的工具,运用DOA构件可以在Delphi或C++Builder开发环境下跳过BDE,而直接通过SQLNet访问Oracle。初次接触DOA,一些编程人员对怎样运用DOA调用存储过程感到困惑,笔者将结合电信综合管理系统中数据加工审核这一具体实例,详细阐述其具体的方法和步骤。 实现方法 1.用TOraclePackage的CallProcedure / CallXXXFunction 用TOraclePackage的CallProcedure方法,我们就可简单地调用Oracle存储过程,该方法中参数以数组的形式传递。当 TOraclePackage的ParameterMode属性为pmNamed时要按照名称传递参数,每个参数前面必须有指定名称的字符串,其格式为: CallProcedure(ProcedureName, [ParameterName1, Parameter1, ParameterName2, Parameter2…]); 当TOraclePackage的ParameterMode属性为pmPositional时,要按照位置传递参数: CallProcedure(ProcedureName,[Parameter1, Parameter2,…]); 输出参数通过传递parString、parInteger、parFloat、parDate或parBoolean常数来定义,输出参数值在过程调用后用GetParameter方法获得,格式为: PackageName.CallProcedure('ProcedureName',[parString]); GetParameter(ParameterId); 如果没有参数,则用parNone获得: PackageName.CallProcedure('ProcedureName', parNone); 与上面类似,我们用TOraclePackage的Call...Function方法也可简单地调用Oracle函数,只是根据返回值的不同,调用相应的方法CallBooleanFunction、CallDateFunction、CallFloatFunction、 CallIntegerFunction或CallStringFunction。 2.用TOracleQuery或TOracleDataSet的Execute 用TOracleQuery或TOracleDataSet执行存储过程的步骤为: (1)设置SQL属性 将TOracleQuery或TOracleDataSet的SQL属性设为: begin ProcedureName (:Parameter1, : Parameter2,…); end; (2)定义参数 定义参数的方式有两种,一是在对象查看器Properties选项卡的Variables属性中,单击省略号按钮,打开变量属性编辑器;二是用 DeclareVariable方法。DOA支持PL/SQL表,它可以作为输入/输出参数传递给后台存储过程和函数,通过一次调用即可传递大量信息,使得在C/S结构中,网络通信量显著减少。在TOracleQuery或TOracleDataSet中定义PL/SQL表既可使用变量属性编辑器(选中PL/SQL Table复选框,然后定义表的大小,如果是字符串型的,还需定义字符串大小),也可在运行时定义PL/SQL表(先调用DeclareVariable方法定义变量,再调用DimPLSQLTable方法定义表大小)。 (3)参数赋值 给输入参数赋值用SetVariable方法,给PL/SQL表赋值首先要创建数组变量,分别赋值数组的各元素,再通过该数组用SetVariable方法给PL/SQL表赋值。 ArrayName := VarArrayCreate([LowBounds, UpBounds], VarType); Table[LowBounds] := value1; … Table[UpBounds] := valuen; OracleQueryName.SetVariable(':TableName', ArrayName); (4)执行存储过程 调用Execute方法执行存储过程,代码如下: OracleQueryName. Execute; (5)获得输出参数 用GetVariable方法获得输出参数值,输入/输出参数为PL/SQL表时,返回的数组变量下限与输入相同;输出参数为PL/SQL表时,返回的数组变量下限从零开始。 应用实例 以下是笔者运用上述第二种方法在电信综合统计管理系统中调用加工审核存储过程的一段源代码: create or replace package pk_sh is type t_object is table of varchar2(15) index by binary_integer; type t_formula is table of number index by binary_integer; procedure sp_audit(sh_time in varchar2,sh_dx in t_object,sh_gs in t_formula); end pk_sh; 我们首先在服务器端创建包pk_sh,包中定义了两种PL/SQL表,其中t_object存储审核对象,t_formula存储审核公式ID,存储过程sp_audit根据传递的参数(时间、对象、公式)对后台数据进行加工审核。 客户端用Delphi编写,即通过DOA访问sp_audit,具体源代码如下: Var OracleSession1: TOracleSession; OracleQuery1: TOracleQuery; Begin //连接数据库 OracleSession1:= TOracleSession.Create(nil); OracleSession1.LogonDatabase := 'chicago'; OracleSession1.LogonUsername := 'scott'; OracleSession1.LogonPassword := 'tiger'; OracleSession1.Connected:= True; OracleQuery := TOracleQuery.Create(nil); OracleQuery1.Session := OracleSession1; //创建数组并赋值 sh_dx:=VarArrayCreate([0, LV_object.Items.Count -1], varVariant); for i:=0 to LV_object.Items.Count -1 do begin sh_dx[i] :=LV_object.Items[i].caption; end; sh_gs:=VarArrayCreate([0, LV_formula.Items.Count -1], varVariant); for i:=0 to LV_formula.Items.Count -1 do begin sh_gs[i] :=strtoint(LV_formula.Items[i].caption); end; sql_str :='pk_sh.sp_audit(:sh_time,:sh_dx,:sh_gs);'; with OracleQuery1 do begin //设置SQL属性 Clear; SQL.Add('begin'); SQL.Add(' ' + sql_str ); SQL.Add('end;'); //定义参数 DeleteVariables; DeclareVariable('sh_time', otString); DeclareVariable('sh_dx', otString); DeclareVariable('sh_gs', otInteger); DimPLSQLTable('sh_dx', 2000, 15); DimPLSQLTable('sh_gs', 500, 0); //参数赋值 SetVariable(': sh_time ', sh_time); SetVariable(':sh_dx', sh_dx); SetVariable(':sh_gs', sh_gs); //执行存储过程 Execute; Free; end; OracleSession1.Connected:= False; OracleSession1.Free; End; delphi中ntohl函数如何调用? 想请教一个关于MDI的问题 请问一个简单的问题 数据库负数问题 如何让一个程序一运行就是隐藏的 application?HWND? 紧急求助webbrowser的问题 高分请教sql 2000 server 数据添加问题,请高手指点,解决立即给分! 图形图象编程 小妹有两个问题不懂,请诸位大虾帮忙解释一下:一个是递归;一个是树。 请教如何判断Idhttp.get 下载状态~~~~~~~~~~~~~~~~~~~~~~~~~~~~ File not found 'scExcelExport.dcu'
begin
b:= 'hello '||a;
end;
//Provider=OraOLEDB.Oracle.1;Password=xxx;Persist Security Info=True;User ID=xxxx;Data Source=orclprocedure TForm1.Button1Click(Sender: TObject);
begin
self.ADOStoredProc1.ProcedureName:='sp_test';
self.ADOStoredProc1.Prepared;
self.ADOStoredProc1.Parameters.CreateParameter('a',ftString,pdInput,100,'lidexian');
self.ADOStoredProc1.Parameters.CreateParameter('b',ftString,pdOutput,100,'');
self.ADOStoredProc1.ExecProc;showmessage(self.ADOStoredProc1.Parameters.ParamByName('b').Value);
end;
有实际例子吗
发我邮箱
[email protected]
racle的工具,运用DOA构件可以在Delphi或C++Builder开发环境下跳过BDE,而直接通过SQLNet访问Oracle。初次接触DOA,一些编程人员对怎样运用DOA调用存储过程感到困惑,笔者将结合电信综合管理系统中数据加工审核这一具体实例,详细阐述其具体的方法和步骤。 实现方法 1.用TOraclePackage的CallProcedure / CallXXXFunction 用TOraclePackage的CallProcedure方法,我们就可简单地调用Oracle存储过程,该方法中参数以数组的形式传递。当 TOraclePackage的ParameterMode属性为pmNamed时要按照名称传递参数,每个参数前面必须有指定名称的字符串,其格式为: CallProcedure(ProcedureName, [ParameterName1, Parameter1, ParameterName2, Parameter2…]); 当TOraclePackage的ParameterMode属性为pmPositional时,要按照位置传递参数: CallProcedure(ProcedureName,[Parameter1, Parameter2,…]); 输出参数通过传递parString、parInteger、parFloat、parDate或parBoolean常数来定义,输出参数值在过程调用后用GetParameter方法获得,格式为: PackageName.CallProcedure('ProcedureName',[parString]); GetParameter(ParameterId); 如果没有参数,则用parNone获得: PackageName.CallProcedure('ProcedureName', parNone); 与上面类似,我们用TOraclePackage的Call...Function方法也可简单地调用Oracle函数,只是根据返回值的不同,调用相应的方法CallBooleanFunction、CallDateFunction、CallFloatFunction、 CallIntegerFunction或CallStringFunction。 2.用TOracleQuery或TOracleDataSet的Execute 用TOracleQuery或TOracleDataSet执行存储过程的步骤为: (1)设置SQL属性 将TOracleQuery或TOracleDataSet的SQL属性设为: begin ProcedureName (:Parameter1, : Parameter2,…); end; (2)定义参数 定义参数的方式有两种,一是在对象查看器Properties选项卡的Variables属性中,单击省略号按钮,打开变量属性编辑器;二是用 DeclareVariable方法。DOA支持PL/SQL表,它可以作为输入/输出参数传递给后台存储过程和函数,通过一次调用即可传递大量信息,使得在C/S结构中,网络通信量显著减少。在TOracleQuery或TOracleDataSet中定义PL/SQL表既可使用变量属性编辑器(选中PL/SQL Table复选框,然后定义表的大小,如果是字符串型的,还需定义字符串大小),也可在运行时定义PL/SQL表(先调用DeclareVariable方法定义变量,再调用DimPLSQLTable方法定义表大小)。 (3)参数赋值 给输入参数赋值用SetVariable方法,给PL/SQL表赋值首先要创建数组变量,分别赋值数组的各元素,再通过该数组用SetVariable方法给PL/SQL表赋值。 ArrayName := VarArrayCreate([LowBounds, UpBounds], VarType); Table[LowBounds] := value1; … Table[UpBounds] := valuen; OracleQueryName.SetVariable(':TableName', ArrayName); (4)执行存储过程 调用Execute方法执行存储过程,代码如下: OracleQueryName. Execute; (5)获得输出参数 用GetVariable方法获得输出参数值,输入/输出参数为PL/SQL表时,返回的数组变量下限与输入相同;输出参数为PL/SQL表时,返回的数组变量下限从零开始。 应用实例 以下是笔者运用上述第二种方法在电信综合统计管理系统中调用加工审核存储过程的一段源代码: create or replace package pk_sh is type t_object is table of varchar2(15) index by binary_integer; type t_formula is table of number index by binary_integer; procedure sp_audit(sh_time in varchar2,sh_dx in t_object,sh_gs in t_formula); end pk_sh; 我们首先在服务器端创建包pk_sh,包中定义了两种PL/SQL表,其中t_object存储审核对象,t_formula存储审核公式ID,存储过程sp_audit根据传递的参数(时间、对象、公式)对后台数据进行加工审核。 客户端用Delphi编写,即通过DOA访问sp_audit,具体源代码如下: Var OracleSession1: TOracleSession; OracleQuery1: TOracleQuery; Begin //连接数据库 OracleSession1:= TOracleSession.Create(nil); OracleSession1.LogonDatabase := 'chicago'; OracleSession1.LogonUsername := 'scott'; OracleSession1.LogonPassword := 'tiger'; OracleSession1.Connected:= True; OracleQuery := TOracleQuery.Create(nil); OracleQuery1.Session := OracleSession1; //创建数组并赋值 sh_dx:=VarArrayCreate([0, LV_object.Items.Count -1], varVariant); for i:=0 to LV_object.Items.Count -1 do begin sh_dx[i] :=LV_object.Items[i].caption; end; sh_gs:=VarArrayCreate([0, LV_formula.Items.Count -1], varVariant); for i:=0 to LV_formula.Items.Count -1 do begin sh_gs[i] :=strtoint(LV_formula.Items[i].caption); end; sql_str :='pk_sh.sp_audit(:sh_time,:sh_dx,:sh_gs);'; with OracleQuery1 do begin //设置SQL属性 Clear; SQL.Add('begin'); SQL.Add(' ' + sql_str ); SQL.Add('end;'); //定义参数 DeleteVariables; DeclareVariable('sh_time', otString); DeclareVariable('sh_dx', otString); DeclareVariable('sh_gs', otInteger); DimPLSQLTable('sh_dx', 2000, 15); DimPLSQLTable('sh_gs', 500, 0); //参数赋值 SetVariable(': sh_time ', sh_time); SetVariable(':sh_dx', sh_dx); SetVariable(':sh_gs', sh_gs); //执行存储过程 Execute; Free; end; OracleSession1.Connected:= False; OracleSession1.Free; End;