I am forwarding this to the ibatis list. You sent it to me only: Hi,
I am sorry for not being more implicit about the problem encountered. I'va a function in Oracle (stand-alone, not packaged) called 'Check_Unique' and it takes a set of parameters and returns a boolean value (the function and corresponding procedure implementation works, see below). The implemention from the XML map is shown below: Problem 1: ----------- <parameterMap id="checkUniqueParameters" class="map"> <parameter property="p_tname" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname1" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue1" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname2" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue2" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname3" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue3" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname4" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue4" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname5" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue5" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="no_pk" jdbcType="NUMERIC" javaType="java.lang.Integer" mode="IN"/> </parameterMap> <procedure id="checkUnique" parameterMap="checkUniqueParameters" resultClass="boolean"> {? = call check_unique(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) } </procedure> I used a HashMap in my SQLMapDao class for binding the parameter values into the Ibatis paramater map: Boolean i = (Boolean) queryForObject("checkUnique", map); Unfortunately, when I execute the above function, the above statement fails, since Oracle cannot bind the RETURN value of the function(whether the value is integer or boolean). How to overcome this problem? Problem 2: ----------- Now for a second example, I've rewritten the Oracle function as procedure, with return value as an INOUT param: <parameterMap id="checkUniqueParameters" class="map"> <parameter property="p_tname" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname1" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue1" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname2" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue2" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname3" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue3" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname4" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue4" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colname5" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="p_colvalue5" jdbcType="VARCHAR2" javaType="java.lang.String" mode="IN"/> <parameter property="no_pk" jdbcType="NUMERIC" javaType="java.lang.Integer" mode="IN"/> <parameter property="ret_val" jdbcType="NUMERIC" javaType="java.lang.Integer" mode="INOUT"/> </parameterMap> <procedure id="checkUnique" parameterMap="checkUniqueParameters" resultClass="boolean"> { call check_unique(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) } </procedure> This time there's no error calling the above statement, but now the value returned in the +ve/-ve test cases is the SAME before and after the statement execution. Sample of SQLMapDao class: Boolean i = new Boolean(true); . . System.out.println("ret_val 1 " + i.toString()); Integer result = (Integer) queryForObject("checkUnique", map); System.out.println("result " + result.toString()); Are my implementation / mappings OK for the procedure? Could you please help me on these matters? Thank you anyway. Regards, Imtiaz On Wed, 02 Mar 2005 13:19:27 +0400, Imtiaz <[EMAIL PROTECTED]> wrote: > Hi, > > I am sorry for not being more implicit about the problem > encountered. > I'va a function in Oracle (stand-alone, not packaged) called > 'Check_Unique' > and it takes a set of parameters and returns a boolean value (the > function > and corresponding procedure implementation works, see below). The > implemention from the XML map is shown below: > > Problem 1: > ----------- > > <parameterMap id="checkUniqueParameters" class="map"> > <parameter property="p_tname" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname1" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue1" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname2" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue2" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname3" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue3" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname4" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue4" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname5" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue5" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="no_pk" jdbcType="NUMERIC" > javaType="java.lang.Integer" mode="IN"/> > </parameterMap> > > <procedure id="checkUnique" parameterMap="checkUniqueParameters" > resultClass="boolean"> > > {? = call check_unique(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) } > > </procedure> > > I used a HashMap in my SQLMapDao class for binding the parameter > values > into the Ibatis paramater map: > > Boolean i = (Boolean) queryForObject("checkUnique", map); > > Unfortunately, when I execute the above function, the above statement > fails, since Oracle cannot bind the RETURN value of the function(whether > the > value is integer or boolean). How to overcome this problem? > > Problem 2: > ----------- > > Now for a second example, I've rewritten the Oracle function as > procedure, > with return value as an INOUT param: > > <parameterMap id="checkUniqueParameters" class="map"> > <parameter property="p_tname" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname1" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue1" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname2" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue2" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname3" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue3" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname4" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue4" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colname5" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="p_colvalue5" jdbcType="VARCHAR2" > javaType="java.lang.String" mode="IN"/> > <parameter property="no_pk" jdbcType="NUMERIC" > javaType="java.lang.Integer" mode="IN"/> > <parameter property="ret_val" jdbcType="NUMERIC" > javaType="java.lang.Integer" mode="INOUT"/> > </parameterMap> > > <procedure id="checkUnique" parameterMap="checkUniqueParameters" > resultClass="boolean"> > > { call check_unique(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) } > > </procedure> > > This time there's no error calling the above statement, but now the > value > returned in the +ve/-ve test cases is the SAME before and after the > statement > execution. > Sample of SQLMapDao class: > > Boolean i = new Boolean(true); > . > . > System.out.println("ret_val 1 " + i.toString()); > Integer result = (Integer) queryForObject("checkUnique", map); > System.out.println("result " + result.toString()); > > Are my implementation / mappings OK for the procedure? > Could you please help me on these matters? Thank you anyway. > > Regards, > Imtiaz > >