亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mybatis之調(diào)用帶輸出參數(shù)的存儲(chǔ)過(guò)程(Oracle)

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

創(chuàng)建一個(gè)存儲(chǔ)過(guò)程

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

SQL工具中調(diào)用存儲(chǔ)過(guò)程

我使用的工具是navicat

在Navicat工具中調(diào)用存儲(chǔ)過(guò)程。

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

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

緩存溢出。使用dbms_output.put_line(變量)時(shí)報(bào)出的錯(cuò)誤,從上面也可以知道dbms_output.put_line默認(rèn)的緩存大小20000bytes 。

解決方法:

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

Mybatis調(diào)用存儲(chǔ)過(guò)程

Mapper中定義方法

【QuestionMapper.java】

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

Service中調(diào)用

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

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

配置映射文件

Oracle腳本

<!--問(wèn)卷導(dǎo)出  存儲(chǔ)過(guò)程   答案 -->
<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腳本

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

調(diào)用存儲(chǔ)過(guò)程和執(zhí)行普通的sql文件大致相同,

需要注意一下幾點(diǎn):

1.statementType: 必須設(shè)置為 CALLABLE。默認(rèn)值是 PREPARED 不需要設(shè)置

2.調(diào)用帶 輸出參數(shù)的存儲(chǔ)過(guò)程時(shí),參數(shù)必須存在以下額外屬性。

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

3.使用 CALL 來(lái)調(diào)用存儲(chǔ)過(guò)程

4.調(diào)用SQLserver的存儲(chǔ)過(guò)程,必須使用{} 包裹起來(lái),使用Oracle沒(méi)有這個(gè)限制。

5.parameterType : 可以省略

存儲(chǔ)過(guò)程傳參不同,mybatis對(duì)應(yīng)接受返回結(jié)果的方式也是各不相同。

如果存儲(chǔ)過(guò)程中 沒(méi)有使用 OUT 或者INOUT 參數(shù)。接受返回結(jié)果和普通的查詢(xún) Sql寫(xiě)法一致。

對(duì)于查詢(xún)語(yǔ)句(select)語(yǔ)句可以使用實(shí)體類(lèi)來(lái)接受返回結(jié)果,mybatis會(huì)自動(dòng)進(jìn)行字段映射。

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

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

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

存儲(chǔ)過(guò)程中使用了 OUT、INOUT類(lèi)型的參數(shù)。即使使用 select 元素查詢(xún),實(shí)際上返回結(jié)果也是null (存儲(chǔ)過(guò)程腳本就沒(méi)有必要寫(xiě)在 select 元素中,可以使用update、delete 等元素)。

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

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

總結(jié)

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

相關(guān)文章

  • Java實(shí)現(xiàn)定時(shí)任務(wù)的方法總結(jié)

    Java實(shí)現(xiàn)定時(shí)任務(wù)的方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)定時(shí)任務(wù)的常用7中方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2023-06-06
  • 在java中獲取List集合中最大的日期時(shí)間操作

    在java中獲取List集合中最大的日期時(shí)間操作

    這篇文章主要介紹了在java中獲取List集合中最大的日期時(shí)間操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java操作xml的方法匯總及解析

    java操作xml的方法匯總及解析

    這篇文章主要介紹了java操作xml的方法匯總及解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java 面向?qū)ο笾^承篇詳解原理與特點(diǎn)

    Java 面向?qū)ο笾^承篇詳解原理與特點(diǎn)

    繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因?yàn)樗试S創(chuàng)建分等級(jí)層次的類(lèi)。繼承就是子類(lèi)繼承父類(lèi)的特征和行為,使得子類(lèi)對(duì)象(實(shí)例)具有父類(lèi)的實(shí)例域和方法,或子類(lèi)從父類(lèi)繼承方法,使得子類(lèi)具有父類(lèi)相同的行為
    2021-10-10
  • 淺談java線程中生產(chǎn)者與消費(fèi)者的問(wèn)題

    淺談java線程中生產(chǎn)者與消費(fèi)者的問(wèn)題

    下面小編就為大家?guī)?lái)一篇淺談java線程中生產(chǎn)者與消費(fèi)者的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • Java如何找出數(shù)組中重復(fù)的數(shù)字

    Java如何找出數(shù)組中重復(fù)的數(shù)字

    這篇文章主要為大家詳細(xì)介紹了Java如何找出數(shù)組中重復(fù)的數(shù)字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 關(guān)于SpringBoot的spring.factories文件詳細(xì)說(shuō)明

    關(guān)于SpringBoot的spring.factories文件詳細(xì)說(shuō)明

    spring.factories 文件是 Spring Boot 自動(dòng)配置機(jī)制的核心部分之一,它位于每個(gè) Spring Boot 自動(dòng)配置模塊的 META-INF 目錄下,經(jīng)??吹?nbsp;spring.factories 文件,卻沒(méi)有對(duì)它進(jìn)行深入的了解和分析,今天我們就一起揭開(kāi)面紗看看它的內(nèi)在,需要的朋友可以參考下
    2024-12-12
  • 分析設(shè)計(jì)模式之模板方法Java實(shí)現(xiàn)

    分析設(shè)計(jì)模式之模板方法Java實(shí)現(xiàn)

    所謂模板方法模式,就是一個(gè)對(duì)模板的應(yīng)用,就好比老師出試卷,每個(gè)人的試卷都是一樣的,這個(gè)原版試卷就是一個(gè)模板,可每個(gè)人寫(xiě)在試卷上的答案都是不一樣的,這就是模板方法模式。它的主要用途在于將不變的行為從子類(lèi)搬到超類(lèi),去除了子類(lèi)中的重復(fù)代碼
    2021-06-06
  • 關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問(wèn)題

    關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問(wèn)題

    這篇文章主要介紹了關(guān)于Scanner對(duì)象的輸入結(jié)束標(biāo)記問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù)

    詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù)

    這篇文章主要介紹了詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論