ibatis调用Oracle中的存储过程和function

一、调用存储过程

Oracle代码

procedure proc_pos_check(p_gtin  in varchar2,  
                         p_safe_code   in varchar2,  
                         p_in_sell_id  in varchar2,  
                         p_buy_id      in varchar2,  
                         p_oper_type   in varchar2,  
                         p_out_sell_id out varchar2,  
                         p_result      out varchar2)

SqlMap代码
<sqlMap namespace="webservice_procheck">
   <parameterMap id="pro_check_req" class="java.util.HashMap">   
       <parameter property="p_gtin" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>   
       <parameter property="p_safe_code" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>   
       <parameter property="p_in_sell_id" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>   
       <parameter property="p_buy_id" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>   
       <parameter property="p_oper_type" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>   
       <parameter property="p_out_sell_id" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />   
       <parameter property="p_result" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT" />   
    </parameterMap>  
    <procedure id="proCheck" parameterMap="pro_check_req">  
        {call pkg_pos.proc_pos_check(?,?,?,?,?,?,?)}  
    </procedure>  
</sqlMap>  

Java代码
public ProCheckQueryRsp proCheck(ProCheckQueryReq proCheckQueryReq)  
{  
      ProCheckQueryRsp rsp = new ProCheckQueryRsp();  
      Map<String, String> map = new HashMap<String, String>();  
  
      //拼装存储过程IN参数  
      map.put("p_gtin", proCheckQueryReq.getGtin());  
      map.put("p_safe_code", proCheckQueryReq.getSecurityCode());  
      map.put("p_in_sell_id", proCheckQueryReq.getSellerID());  
      map.put("p_buy_id", proCheckQueryReq.getBuyerID());  
      map.put("p_oper_type", proCheckQueryReq.getOperType());  
  
      //拼装存储过程OUT参数  
      map.put("p_out_sell_id", "");  
      map.put("p_result", "");  
  
      //调用存储过程  
      dbOperation.queryForObject("webservice_procheck.proCheck", map);  
  
      //将OUT值存入实体类中  
      rsp.setSellerID(map.get("p_out_sell_id"));  
      rsp.setResult(map.get("p_result"));  
      return rsp;  
}  

二、调用function

Oracle代码

CREATE OR REPLACE Function F_createalarminfoinstancename(v_instancename in varchar2, v_almobjtype in varchar2, v_almobj in varchar2)  
return  varchar2  
is
v_err varchar2(200);  
result varchar2(10);  
Begin  
  result:='1';  
       update alm_alarminfo set instancename = v_instancename where alarmobjdn = v_almobj and alarmobjtype = v_almobjtype;  
       commit;  
      return result;  
End F_createalarminfoinstancename;  

SqlMap代码
<parameterMap class="java.util.Map" id="f_map">  
<parameter property="result" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT" />
<parameter property="v_instancename" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="v_almobjtype" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>  
<parameter property="v_almobj" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>  
</parameterMap>
<procedure id="Workorder.updateAlarmInfoInstance" parameterMap="f_map">  
<![CDATA[  
{? = call F_createalarminfoinstancename(?,?,?)} 
]]>    
</procedure>  

Java代码
Map m = new HashMap();  
m.put("v_instancename", instancename);  
m.put("v_almobjtype", alarmobjtype);  
m.put("v_almobj", alarmobjdn);  
m.put("result", "");  
service.update("Workorder.updateAlarmInfoInstance", m); 

原帖地址:

http://blog.csdn.net/liuyuhua0066/article/details/7270253

http://blog.csdn.net/haqer0825/article/details/8751989

时间: 2024-08-02 17:31:27

ibatis调用Oracle中的存储过程和function的相关文章

Mybatis调用Oracle中的存储过程和function

一.Mybatis调用存储过程 1 在数据库中创建以下的存储过程 create or replace procedure pro_hello(p_user_name in varchar2,p_result out varchar2) is begin   p_result := 'hello,' || p_user_name; end; 2 编写SQL映射文件mapper.xml statementType里的CALLABLE是标注此sql为存储过程. parameterType是标注要传的参

使用Java调用Oracle数据库的存储过程实例

使用Java调用Oracle数据库的存储过程实例时间:2009-08-19 18:02:43来源:网络 作者:未知 点击:984次 一:无返回值的存储过程1.建立存储过程CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) ASBEGININSERT INTO T_TEST (I_ID,I_NAME) VALUES (PARA1, PARA2);END TESTA; 2.相应的JAVA程序impo一:无返回值

oracel-如何把下面的oracle中的存储过程转换成sql的?

问题描述 如何把下面的oracle中的存储过程转换成sql的? create or replace procedure BJ_MAXCASENO_Get(InCount in number, OutMaxCaseNO out number) as tem number; begin select max(caseno) into tem from BJ_MAXCASENO; if tem is null then tem := 0; -- 没有数据时新增0进入 insert into BJ_MA

ibatis操作oracle中CLOB类型的值

问题描述 ibatis操作oracle中CLOB类型的值 页面我是用了Struts标签,ibatis需要操作oracle中的CLOB类型的数据,该怎么操作?ibatis配置文件中需要设置什么样的类型于其对应.java中的实体类我是不是需要定义成CLOB类型呢?> 解决方案 可以配置ParameterMap和ResultMap就可以方便的实现对LOB的读写了,而且不用去实现任何类.只需要配置就可以了. 如: 这是返回的Clob 这是参数里面包含CLob 解决方案二: 解决方案三: 解决方案四: 解

C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

  C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CREATE PROCEDURE sp_AccountRole_Create @CategoryID int, @RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int --

Oracle中利用存储过程建表

Oracle中存储过程不可以执行DDL语句,但是我们可以利用动态sql语句来建立表格. 如下:   代码 create or replace procedure spCreateTestTableis    v_CreateString varchar2(1000);begin    declare        v_count number;    begin        v_count := 0;                select count(*)        into v_c

在oracle中如何实现,一个function将传入的insert语句的rowid插入到临时表.

问题描述 create or replace function f_myfunc(sqlstr varchar2) is pragma autonomous_transaction; Result varchar2(2000);begin --sqlstr类似于 'insert into mytable (field1, field2) values ('1', '2')' ; -- insert into mytable (field1, field2) values ('1', '2') r

Oracle中调试存储过程

oracle|存储过程 本人在写存储过程时,不知道如何调试它. 有一种调试办法就是在程序中打印出变量的值,在JAVA中俺是打印在控制台上的.以下告诉众位如何从在sqlplus上实现. 1.sqlplus 上执行 "set serveroptput on"命令 2.在存储过程中可以用  DBMS_OUTPUT.PUT_LINE(VarName); 来打印出来 给个存储过程的例子: create or replace procedure test is  Emp_name    VARCH

Ibatis往Oracle中插入字符串的时候提示插入的值对于列过大

问题描述 我现在使用Ibatis连接数据库,但是在用他往数据库里插入字符串的时候总是提示"ORA-01401:插入的值对于列过大".但是我数据库中相应字段设置的是varchar2(4000),已经是最大了.而且在用plSQL往里插入相同内容的时候是可以插入的.所以我怀疑是字符集的原因.现在我的环境如下:oracle的字符集是utf-8,客户端也被我用注册表的方法改成了AMERICAN_AMERICA.UTF8(原来是SIMPLIFIEDCHINESE_CHINA.ZHS16GBK),i