最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis之調用帶輸出參數(shù)的存儲過程(Oracle)

 更新時間:2023年11月30日 17:03:26   作者:柳風123  
這篇文章主要介紹了mybatis調用帶輸出參數(shù)的存儲過程(Oracle),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

創(chuàng)建一個存儲過程

CREATE OR REPLACE PROCEDURE GET_QUESTIONNAIRE_CONTENT(QUESTIONNAIRE_ID_IN IN VARCHAR2, 
	resultOut OUT CLOB)
begin
# 處理邏輯
	resultOut = 'result....'
end

SQL工具中調用存儲過程

我使用的工具是navicat

在Navicat工具中調用存儲過程。

    declare 
    	V_questionid VARCHAR2(100) ; --輸入?yún)?shù)
    	V_replay clob; --輸出參數(shù)
    BEGIN
	    DBMS_OUTPUT.ENABLE(buffer_size => null) ; --設置緩存大小
	    V_questionid := '2079439a1d0a4287999e1f0c3cffade12'; --賦值
	    
	    --調用存儲過程,GET_QUESTIONNAIRE_CONTENT 為存儲過程的名字
	    GET_QUESTIONNAIRE_CONTENT(V_questionid,V_replay); 
	    dbms_output.put_line(V_replay); --輸出結果
    end;

錯誤 [Err] ORA-20000: ORU-10027: buffer overflow, limit of 20000 bytes

緩存溢出。使用dbms_output.put_line(變量)時報出的錯誤,從上面也可以知道dbms_output.put_line默認的緩存大小20000bytes 。

解決方法:

在調用Oracle輸出語句之前,先調用 DBMS_OUTPUT.ENABLE(buffer_size => null),表示輸出buffer不受限制。

Mybatis調用存儲過程

Mapper中定義方法

【QuestionMapper.java】

void callProcedureContent(Map<String,Object> args);

Service中調用

// 使用Map 來傳參并接受返回結果
Map<String,Object> args=new HashMap<>();
args.put("questionnaireId","q121231123123");//問卷id
args.put("sqlStr",null);//接受返回結果

// 對于此存儲過程而言,不需要指定返回結果。  sqlStr 會被賦予 存儲過程的out類型參數(shù)值
questionMapper.callProcedureContent(args);
String result = (String)args.get("sqlStr"); //從map 中獲取結果

配置映射文件

Oracle腳本

<!--問卷導出  存儲過程   答案 -->
<update id="callProcedureContent"  statementType="CALLABLE"  parameterType="map">
	 CALL GET_QUESTIONNAIRE_CONTENT( #{questionnaireId,mode=IN,jdbcType=VARCHAR},#{sqlStr,mode=OUT,jdbcType=CLOB,javaType=string})
</update>

SQLServer腳本

<!--問卷導出  存儲過程   答案 -->
<update id="callProcedureContent"  statementType="CALLABLE"  parameterType="map">
	{ CALL GET_QUESTIONNAIRE_CONTENT( #{questionnaireId,mode=IN,jdbcType=VARCHAR},#{sqlStr,mode=OUT,jdbcType=CLOB,javaType=string}) }
</update>

調用存儲過程和執(zhí)行普通的sql文件大致相同,

需要注意一下幾點:

1.statementType: 必須設置為 CALLABLE。默認值是 PREPARED 不需要設置

2.調用帶 輸出參數(shù)的存儲過程時,參數(shù)必須存在以下額外屬性。

  • mode:必須設置( mode=OUT、mode=INOUT)
  • jdbcType :必須設置 (jdbcType=VARCHAR、jdbcType=INTEGER。。。。。。。)

3.使用 CALL 來調用存儲過程

4.調用SQLserver的存儲過程,必須使用{} 包裹起來,使用Oracle沒有這個限制。

5.parameterType : 可以省略

存儲過程傳參不同,mybatis對應接受返回結果的方式也是各不相同。

如果存儲過程中 沒有使用 OUT 或者INOUT 參數(shù)。接受返回結果和普通的查詢 Sql寫法一致。

對于查詢語句(select)語句可以使用實體類來接受返回結果,mybatis會自動進行字段映射。

<select id="id"  statementType="CALLABLE"  resultType="map">
	CALL SELECT_PROCEDURE(#{id,mode=IN,jdbcType=VARCHAR})
</update>

如果開啟了配置下劃線映射駝峰標記的配置,會將數(shù)據(jù)庫字段(下劃線)映射為駝峰寫法的字段(USER_NAME—>userName)

<setting name="mapUnderscoreToCamelCase" value="true" />

存儲過程中使用了 OUT、INOUT類型的參數(shù)。即使使用 select 元素查詢,實際上返回結果也是null (存儲過程腳本就沒有必要寫在 select 元素中,可以使用update、delete 等元素)。

通常使用實體類或者map作為傳入?yún)?shù)并接受返回結果。

<update id="id"  statementType="CALLABLE"  parameterType="map">
	{ CALL PROCEDURE_NAME( #{id,mode=IN,jdbcType=VARCHAR}) }
</update>

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • IDEA中的Kafka管理神器詳解

    IDEA中的Kafka管理神器詳解

    這款基于IDEA插件實現(xiàn)的Kafka管理工具,能夠在本地IDE環(huán)境中直接運行,簡化了設置流程,為開發(fā)者提供了更加緊密集成、高效且直觀的Kafka操作體驗
    2025-01-01
  • Maven pom的distributionManagement配置方式

    Maven pom的distributionManagement配置方式

    文章主要介紹了Maven的distributionManagement配置方式,以及它的作用、配置方法和重要性,distributionManagement用于指定構件的發(fā)布位置,包括下載URL、狀態(tài)等,文章還詳細解釋了如何配置repository和snapshotRepository,以及它們的用途和區(qū)別
    2025-01-01
  • 詳解Java字符型常量和字符串常量的區(qū)別

    詳解Java字符型常量和字符串常量的區(qū)別

    Java 中的字符型常量和字符串常量是兩種不同的數(shù)據(jù)類型,本文將給大家詳細介紹一下Java字符型常量和字符串常量的區(qū)別,文中通過代碼講解的非常詳細,需要的朋友可以參考下
    2023-10-10
  • SpringBoot監(jiān)控模塊Actuator的用法詳解

    SpringBoot監(jiān)控模塊Actuator的用法詳解

    Spring?Boot?Actuator?是?Spring?Boot?自帶的一個功能模塊,提供了一組已經(jīng)開箱即用的生產(chǎn)環(huán)境下常用的特性和服務,比如應用程序的健康檢查、信息暴露、度量收集、日志記錄等,本文將給大家詳細SpringBoot監(jiān)控模塊Actuator的用法
    2023-06-06
  • Spring Cloud Gateway Hystrix fallback獲取異常信息的處理

    Spring Cloud Gateway Hystrix fallback獲取異常信息的處理

    這篇文章主要介紹了Spring Cloud Gateway Hystrix fallback獲取異常信息的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java設計模式之動態(tài)代理模式實例分析

    Java設計模式之動態(tài)代理模式實例分析

    這篇文章主要介紹了Java設計模式之動態(tài)代理模式,結合實例形式分析了動態(tài)代理模式的概念、功能、組成、定義與使用方法,需要的朋友可以參考下
    2018-04-04
  • Security框架:如何使用CorsFilter解決前端跨域請求問題

    Security框架:如何使用CorsFilter解決前端跨域請求問題

    這篇文章主要介紹了Security框架:如何使用CorsFilter解決前端跨域請求問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 基于Java代碼實現(xiàn)游戲服務器生成全局唯一ID的方法匯總

    基于Java代碼實現(xiàn)游戲服務器生成全局唯一ID的方法匯總

    我們在做服務器系統(tǒng)開發(fā)的時候,為了適應數(shù)據(jù)大并發(fā)的請求,需要插入數(shù)據(jù)庫之前生成一個全局的唯一id,糾結全局唯一id怎么生成呢?下面小編給大家分享Java代碼實現(xiàn)游戲服務器生成全局唯一ID的方法匯總,涉及到優(yōu)劣勢方面的知識點,對此感興趣的朋友一起看看吧
    2016-10-10
  • Java實現(xiàn)文件檢索系統(tǒng)的示例代碼

    Java實現(xiàn)文件檢索系統(tǒng)的示例代碼

    這篇文章主要為大家詳細介紹了如何劉Java語言實現(xiàn)簡易的文件檢索系統(tǒng),文中的示例代碼講解詳細,對我們學習Java開發(fā)有一定的幫助,需要的可以參考一下
    2022-07-07
  • java 實現(xiàn)鏈棧存儲的方法

    java 實現(xiàn)鏈棧存儲的方法

    下面小編就為大家?guī)硪黄猨ava 實現(xiàn)鏈棧存儲的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

嘉祥县| 朔州市| 瑞丽市| 绥宁县| 夏邑县| 威远县| 珲春市| 英吉沙县| 宁阳县| 荃湾区| 文登市| 滁州市| 乐清市| 吴旗县| 栾城县| 霍山县| 潼关县| 抚顺市| 华坪县| 浮梁县| 雷山县| 潼关县| 新宁县| 连州市| 平安县| 五华县| 堆龙德庆县| 营山县| 即墨市| 三门县| 新宁县| 辽阳市| 库车县| 乌兰浩特市| 陆丰市| 开远市| 大冶市| 栾城县| 英吉沙县| 十堰市| 栖霞市|