说明:存储过程用Java 代码测试过,完全正确

// 包的描述:--1.包头
// create or replace package adovpersoninfo IS
//
// -- Author : ADMIN
// -- Created : 2010-4-19 下午 10:09:14
// -- Purpose : 返回游标
// TYPE t_cursor IS REF CURSOR;--说明:动态游标;作用:返回多表联合复合查询
//   
// -- Public function and procedure declarations
// procedure getPersonInfo(personid IN NUMBER,o_cursor out t_cursor);
//
// end adovpersoninfo;
//
/**
  create or replace package body adovpersoninfo IS     -- Function and procedure implementations
  procedure getPersonInfo (personid IN NUMBER,o_cursor out t_cursor)IS    BEGIN
  OPEN o_cursor FOR SELECT  personinfo.pid,personinfo.personname,personinfo.age,
province.pname,city.cname,town.townname,
personinfo.vah,personinfo.addrh,p.pname pname1,c.cname cname1
,t.townname tname1,personinfo.va,personinfo.addr,personinfo.stayyear,
personinfo.rt,personinfo.sex,personinfo.cardnum,personinfo.mailcode,
to_char(personinfo.birthday,'yyyy-mm-dd') birthday,nationkind.nationkind,
jobkind.jobname,jobmkind.jmname,job.jomname,gdr.gname,marstate.mname  
FROM  personinfo,ora1.province,ora1.city,ora1.town,ora1.province p ,ora1.city c,ora1.town t
,ora1.MARSTATE,ora1.gdr,ora1.job,ora1.JOBMKIND,ora1.jobkind
,ora1.nationkind
   WHERE  province.pid(+)=personinfo.provinceh AND  city.cid(+)= personinfo.cityh 
AND town.tid(+)=personinfo.townh  AND p.pid(+)=personinfo.province 
AND c.cid(+)=personinfo.city AND t.tid(+)=personinfo.town 
AND nationkind.nid(+)=personinfo.nation AND jobkind.joid(+)=personinfo.jobkind 
AND jobmkind.jmid(+)=personinfo.jobmkind  AND job.jid(+)=personinfo.job
AND gdr.gid(+)=personinfo.gralevel AND marstate.mid(+)=personinfo.marstate 
AND personinfo.pid=personid;
  
  END getPersonInfo;
end adovpersoninfo; */存储过程:
<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap namespace="pinfo">
 <parameterMap id="getpin" class="java.util.Map">
        <parameter property="o_cursor" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT"/> 
        <parameter property="personid" jdbcType="NUMBER" javaType="java.lang.Integer" mode="IN"/>
    </parameterMap>
    <procedure id="getpinfo" parameterMap="getpin">   
 {call adovpersoninfo.getPersonInfo(?,?)}  
    </procedure>
</sqlMap>
报错:
java.lang.RuntimeException: Error occurred.  Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'.  Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: org.xml.sax.SAXParseException: The element type "sqlMap" must be terminated by the matching end-tag "</sqlMap>".
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:89)
at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63)
at testselect.User.main(User.java:23)
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'.  Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: org.xml.sax.SAXParseException: The element type "sqlMap" must be terminated by the matching end-tag "</sqlMap>".
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:86)
... 2 more
Caused by: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'.  Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: org.xml.sax.SAXParseException: The element type "sqlMap" must be terminated by the matching end-tag "</sqlMap>".
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:123)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:84)
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51)
... 3 more
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: org.xml.sax.SAXParseException: The element type "sqlMap" must be terminated by the matching end-tag "</sqlMap>".
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:53)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapParser.parse(SqlMapParser.java:51)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$11.process(SqlMapConfigParser.java:410)
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121)
... 7 more
Caused by: org.xml.sax.SAXParseException: The element type "sqlMap" must be terminated by the matching end-tag "</sqlMap>".
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1739)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2923)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
at com.ibatis.common.xml.NodeletParser.createDocument(NodeletParser.java:157)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:50)
... 10 more