资源描述:
《delphi中调用oracle的存储过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、-【delphi+oracle报表解决方案(一)】delphi中调用oracle的存储过程(分带返回游标,不返回值两种) 关键字:delphi,oracle存储过程,游标,返回数据集,报表注:delphi6+oracle8.1.6一.创建包与包体1.附:建表aaclass为下面作测试用createtableaaclass(CIDVARCHAR2(50),CNAMEVARCHAR2(50),pnumberNUMBER(10,0));INSERTINTOaaclassvalues('c1','cn1'
2、,10);INSERTINTOaaclassvalues('c2','cn2',40);INSERTINTOaaclassvalues('c1','cn3',30);commit;2.建包:CREATEORREPLACE PACKAGEPKG_JCCTEST1 AS.--- typerc_classisrefcursor; --求p1,p2的和与差,返回的多个值通过游标返回 procedureGetSubAnd
3、Sum2(p1number,p2 number, ResultCursoroutrc_class); --查询满足条件的数据集,返回数据集通过游标返回 procedureGetClass2(ainnumber,ResultCursoroutrc_class); --往表中插一条记录,不返回结果集时,本人用AdoQuery调用(adodataset好象要求必须返回结果集) procedureInsertClass(p_cidvarchar2,p_cnamevarchar2,
4、 p_pnumbernumber);endPKG_JCCTEST1; 3.建包体CREATEORREPLACE PACKAGEBODYPKG_JCCTEST1.---ASprocedureGetSubAndSum2(p1number,p2 number, ResultCursoroutrc_class)ISBEGIN openResultCursorfor selectp1-p2as"sum",p1+p2as"sub"fr
5、omdual;END;procedureGetClass2(ainnumber,ResultCursoroutrc_class)isbegin openResultCursorfor selectaaclass.*fromaaclasswherepnumber>a;end;procedureInsertClass(p_cidvarchar2,p_cnamevarchar2, p_pnumbernumber).---isbegin insertint
6、oaaclassvalues(p_cid,p_cname,p_pnumber);-- commit;end; 二.在delphi中利用AdoDataSet调用上述第一个存储过程1.利用AdoConnection1连接数据库(驱动为oracleProviderforOLEDB), **并在连接字符串中加入这一节: PLSQLRSet=1;如下所示:Provider=OraOLEDB.Oracle.1;Password=KXD;PersistSecurityInfo=True;UserID=KXD;
7、DataSource=TEST3;PLSQLRSet=12.在窗体上加AdoDataSet1.---指明连接为上述AdoConnection1,下面可以放一个按钮,单击按钮就能调用第一步中创建的包过程,并返回数据集。代码如下所示:procedureTForm1.Button1Click(Sender:TObject);var AResult,BResult:integer;begin ADODataSet1.Close; ADODataSet1.CommandType:= cmdText; ADO
8、DataSet1.Parameters.Clear; //***利用call方法调用oracle过程时,参数必须由?来传,即使你要传的参数为常理 //输出游标的参数不需要指定!!!!!!,本来此函数带三个参数,我们这里只需要传两个参数. ADODataSet1.CommandText:='{callPKG_JCCTEST1.GetSubAndSum2(?,?)}'; //***C顺序有关,createparam必须放在commandtext赋值语句之后. //创建第一个参数,对应c