欢迎来到天天文库
浏览记录
ID:34725014
大小:50.36 KB
页数:6页
时间:2019-03-10
《oracle存储过程调用实践》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一直以来,存储过程就是一个心病啊,都不知道到底什么东西。不过幸好在别人的带领下,战胜了这个恐惧,算是小小的入门了。(oracle的sql叫做pl-sql,在语法上和m-sql有一些不同的地方。而且,由于java和Oracle的密切关系,所以oracle较高版本的pl-sql中也出现一些类似于面向对象编程的语法结构。)现在把我遇到的各种错误列出来,当然我有log,要不然我都记不住了。1.ORA-00921:unexpectedendofSQLcommand基本sql错误2.badSQLgrammar基本sql错误3.wrongnumberortypesofargumentsincallt
2、o***调用存储过程传入的参数不对4.weblogic.jdbc.wrapper.Array_oracle_sql_ARRAY 使用的是weblogic容器提供的ARRAY,不能直接转化成ORACLE的ARRAY,但是可以用java.sql下面的接口。5. identifier***mustbedeclared 数据库中没有定义这个名字的存储过程6.ORA-03115:unsupportednetworkdatatypeorrepresentation存储过程传入的参数类型不支持 在pl-sql中有package,可以用来定义访问变量的自定义类型,但是返回的类型除了游标以外,都不能被
3、外部,如jdbc来访问。都会提示类型不知道的错误,不管你有没有加上表空间的名字。而这个时候需要用全局的类型来定义。全局的类型,主要分为三种:1.createorreplacetypeobj_1asobject(**number,**number,**varchar2(36),**varchar2(150));2.createorreplacetypetab_1astableofobj_1;1.createorreplacetypearray_1ASVARRAY(21)OFobj_1;这几种类型都可以作为返回值,而且,后两种类型,常常可以以多维数组的形式返回。在java中可以这样取值:
4、 proc.execute(); java.sql.Arrayarr=proc.getArray(2); Object[]strcs=(Object[])arr.getArray(); Object[]objs; for(Objectstrct:strcs){ objs=((java.sql.Struct)strct).getAttributes(); bean=new**();
5、 bean.set**(((BigDecimal)objs[0]).intValue()); bean.set**(((BigDecimal)objs[1]).intValue()); bean.set**((String)objs[2]); bean.set**((String)objs[3]); beans.add(bean); }这里要注意,虽然利用的是Oracle的tabl
6、e或者varray,但是返回类型都用java.sql.Array接口来表示就好了,不要用具体的实现类,因为实现类通常在服务器的环境中,本地的classpath中根本没有配置。如果存储过程中的有多个查询,比如两个,第一个查询查询一个list出来,第二个查询要遍历这个list,分别查询,然后组装成一个ARRAY的形式,就可以利用上面的三个类型中的1,2或者1,3即可。值得注意的是,oracle的面向对象特点,所以,当你要在ARRAY扩充之后插入一行时,可以先利用对象的构造函数new一次行对象。如newoj_1(f1,f2,f3),这是它默认的构造函数,你也可以自定义函数。现在有两个表A(i
7、dvarchar(15),c_idvarchar(20))其中id是主键B(c_idvarchar(20),c_name1varchar(100),c_name2varchar(100),c_name3varchar(120),date...)其中c_id是主键假设现在有一个查询,首先从A表中通过id查询一列的c_id然后利用c_id查询出对应的c_id,c_name1,c_name2.--创建对象createorreplacetypeMY_I
此文档下载收益归作者所有