當前位置:首頁 » 存儲配置 » sqlserver存儲過程輸出參數

sqlserver存儲過程輸出參數

發布時間: 2022-08-05 22:19:11

Ⅰ mybatis怎麼用sqlserver存儲過程輸出參數

首先定義一個MySQL存儲過程:
DROP PROCEDURE IF EXISTS test ;
CREATE PROCEDURE test (IN p1 VARCHAR(26), OUT pResult VARCHAR(512))
BEGIN
SET pResult := NULL;
SET pResult :=CONCAT ( 'test',p1);
SELECT * FROM tb2 WHERE commet like Concat('%',p1, '%'); -- this 返回一個結果集
END;

tb2的表結構和數據如下:
DROP TABLE IF EXISTS `tb2`;
CREATE TABLE `tb2` (
`t_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`Name` varchar(255) DEFAULT NULL COMMENT '欄位名',
`type` int(1) DEFAULT NULL COMMENT '類型,0-正常,1-異常,2-傳輸,3-退單',
`commet` varchar(255) DEFAULT NULL COMMENT '備注',
`optime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '操作時間',
PRIMARY KEY (`t_id`)
) ;

繼續增加新的類:
Stb2.java內容:
package com.springdemo.usermgr.vo;

import java.util.Date;

/**
* tb2表實體類
* @author zhouxj
* @date 2014-09-10 下午03:29:32
*/
public class Stb2{

private Integer t_id;
private String name;
private Integer type;
private String commet;
private java.util.Date optime;

public Integer getT_id() {
return t_id;
}
public void setT_id(Integer t_id) {
this.t_id = t_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getCommet() {
return commet;
}
public void setCommet(String commet) {
this.commet = commet;
}
public java.util.Date getOptime() {
return optime;
}
public void setOptime(java.util.Date optime) {
this.optime = optime;
}

}

修改SUserMapper.java內容:
package com.springdemo.usermgr.vo;

import java.util.List;
import java.util.Map;

public interface SUserMapper {
public int insertSUser(SUser user);
public SUser getSUser(String name);
public List<Stb2> getTestProc(Map<String, Object> param);
}

Test2測試類內容:

package domain;

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.springdemo.usermgr.vo.SUserMapper;
import com.springdemo.usermgr.vo.Stb2;

public class Test2 {
public static void main(String[] args) throws IOException {
String resource = "config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = ssf.openSession(true); //true 為自動提交事務

try {
Map<String, Object> parms = new HashMap<String, Object>();
parms.put("queryStr", "的");

SUserMapper spMapper = session.getMapper(SUserMapper.class);

List<Stb2> as=spMapper.getTestProc(parms);
String outPara=(String) parms.get("retStr");
System.out.println(outPara);
System.out.println(as.toString());
//org.apache.ibatis.type.JdbcType.VARCHAR
// org.apache.ibatis.mapping.ParameterMode.OUT
} catch (Exception e) {

e.printStackTrace();
} finally {
session.close();
}
}
}

config.xml配置文件修改內容:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="SUser" type="com.springdemo.usermgr.vo.SUser" />
<typeAlias alias="Stb2" type="com.springdemo.usermgr.vo.Stb2" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root" />
<property name="password" value="pass" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="SUser.xml" />
<mapper resource="Stb2.xml" />
</mappers>
</configuration>

增加配置文件Stb2.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springdemo.usermgr.vo.SUserMapper">

<resultMap type="com.springdemo.usermgr.vo.Stb2" id="itemResult">

</resultMap>

<select id="getTestProc" parameterType="java.util.Map" statementType="CALLABLE"
resultMap="itemResult">
{call test.test(
#{queryStr,jdbcType=VARCHAR,mode=IN},
#{retStr,jdbcType=VARCHAR,mode=OUT})
}
</select>

</mapper>

運行Test2類,可能的結果:
test的
[com.springdemo.usermgr.vo.Stb2@6900bf61, com.springdemo.usermgr.vo.Stb2@3014af22]

返回了參數內容,和兩條記錄。

Ⅱ 存儲過程中如何執行帶輸出參數的動態SQL

SQL Server存儲過程中執行帶輸出參數的動態sql是很多人經常碰到的問題,比如根據一些條件查詢列表,並返回記錄數等。下面是一個參考示例,查詢用戶列表,它可以利用臨時表實現翻頁,並帶有死鎖和超時檢測功能。 CREATE PRocere pUserList ( @UserType char(2), @pagenum int, @perpagesize int, @pagetotal int out, @rowcount int out ) as set nocount on DECLARE @Err INT,@ErrCounter INT declare @sql nvarchar(2000) --聲明動態sql執行語句 declare @pagecount int --當前頁數 declare @sWhere nvarchar(200) declare @sOrder nvarchar(100) set @sWhere = ' where 1=1 ' if not(@UserType is null) set @sWhere = @sWhere + ' and UserType = ' + @UserType set @sOrder = ' order by UserID ' --取得當前資料庫的記錄總數 declare @row_num int LockTimeOutRetry: --創建臨時表,作為數據過濾 create table #change (T_id int) set @sql = 'select @row_num=count(*) from dbo.[User]' + @sWhere exec sp_executesql @sql,N'@row_num int output', @row_num output if @row_num % @perpagesize =0 set @pagetotal = @row_num/@perpagesize else set @pagetotal = @row_num/@perpagesize + 1 set @rowcount = @row_num if @row_num > @perpagesize begin set @row_num = @pagenum * @perpagesize if @row_num = @perpagesize begin set @sql = N'select top ' + cast(@perpagesize as varchar) + ' UserID,LoginName,RealName from dbo.[User]' + @sWhere + @sOrder exec sp_executesql @sql SET @Err = @@ERROR IF @Err <> 0 GOTO ErrorHandler return 0 end else begin set @row_num = (@pagenum-1) * @perpagesize set @pagecount = @row_num set @sql=N'insert #change (T_id) select top ' + cast(@pagecount as varchar) + ' UserID from dbo. [User] '+@sWhere+' and UserID not in (select T_id from #change)' + @sOrder exec sp_executesql @sql set @sql = N'select top ' + cast(@perpagesize as varchar) + ' UserID,LoginName,RealName from dbo.[User] '+@sWhere+' and UserID not in (select T_id from #change)' + @sOrder exec sp_executesql @sql SET @Err = @@ERROR IF @Err <> 0 GOTO ErrorHandler return 0 end end else begin set @sql = 'select UserID,LoginName,RealName from dbo.[User]' + @sWhere + @sOrder exec sp_executesql @sql SET @Err = @@ERROR IF @Err <> 0 GOTO ErrorHandler return 0 end ErrorHandler: IF (@Err = 1222 OR @Err = 1205) AND @ErrCounter = 5 BEGIN RAISERROR ('Unable to Lock Data after five attempts.', 16,1) return -100 END IF @Err = 1222 OR @Err = 1205 -- Lock Timeout / Deadlock BEGIN WAITFOR DELAY '00:00:00.25' SET @ErrCounter = @ErrCounter + 1 GOTO LockTimeOutRetry END -- else unknown error RAISERROR (@err, 16,1) WITH LOG return -100 GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO

Ⅲ sql 存儲過程裡面輸出參數是什麼意思就是後面加個output 那種參數,和其他參數有什麼不一樣

其他參數要提前賦值,而output不需要提前賦值,只需要提供一個變數,在存儲過程執行完的時候,output類型的變數值就會修改,獲得返回值,只能通過這個方法獲得返回值,而不能像函數一樣直接返回結果。因為存儲過程是沒有返回值的。

Ⅳ 幫忙解釋一個SQL Server 中存儲過程的輸入和輸出參數的區別

1. 如果存儲過程h3已經存在,就drop掉
2. 創建存儲過程h3
參數P1,P2,其中P2為輸出參數
存儲過程功能:取學號為P1的學生姓名,由P2輸出
3. 定義變數,調用存儲過程,返回學號是1002的學生姓名

Ⅳ Sql Server中存儲過程中輸入和輸出參數(簡單實例 一看就懂)

[sql]
--
===================【創建存儲過程】=====================
USE
[Message]
GO
/******
Object:
StoredProcere
[dbo].[讀取外部資料庫查詢]
Script
Date:
10/24/2012
05:39:16
******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
--
=============================================
\\
Working沒有變1,錯誤碼沒有測試,計劃時間測試,企業名稱
create
PROCEDURE
[dbo].[資料庫查詢]
@SmsContent
varchar(20)='1231',
--
輸入參數
@bj1
int
out
--
輸入出參數
AS
BEGIN
SELECT
@bj1=count(Id)
from
sss
END
--
===============【調用】==================
USE
[Message]
DECLARE
@return_value
int
EXEC
[dbo].[資料庫查詢]
'1231',@return_value
output
SELECT
@return_value

Ⅵ sql server 中 一個要輸入參數和輸出參數的存儲過程。

1、首先我們需要打開SQL Server Managment管理工具,新建一個表。

Ⅶ plsql中怎麼調用帶輸出參數的存儲過程

1、首先打開一個的PLSQL Developer的界面中,點擊左上角的工具,如下圖所示。

Ⅷ SQL Server 2005 中存儲過程的輸入參數和輸出參數的區別

輸入參數是傳遞給存儲過程的,就是原料.輸出參數是存儲過程的產出,就是產品.
在調用存儲過程前,相關的輸入參數必須已經有確定的值;
存儲過程根據輸入參數的值以及內部演算法,將計算的結果保存到輸出參數中.
輸出參數在調用存儲過程前無須有確定的值,只需定義這樣一個變數,將他傳給存儲過程,存儲過程執行之後,該輸出參數就有了確定的值.可以進一步使用該值.

Ⅸ sql存儲過程 輸出參數

SQL存儲過程輸出參數:

--===================【創建存儲過程】=====================

USE[Message]
GO
/******Object:StoredProcere[dbo].[讀取外部資料庫查詢]ScriptDate:10/24/201205:39:16******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
--=============================================\Working沒有變1,錯誤碼沒有測試,計劃時間測試,企業名稱

createPROCEDURE[dbo].[資料庫查詢]
@SmsContentvarchar(20)='1231',--輸入參數
@bj1intout--輸入出參數

AS
BEGIN

SELECT@bj1=count(Id)fromsss

END


--===============【調用】==================

USE[Message]

DECLARE@return_valueint

EXEC[dbo].[資料庫查詢]'1231',@return_valueoutput

SELECT@return_value
熱點內容
資料庫數據的一致性 發布:2025-01-11 17:30:45 瀏覽:707
手機怎麼設置手勢安卓 發布:2025-01-11 17:15:54 瀏覽:964
威能壁掛爐解壓閥 發布:2025-01-11 17:15:53 瀏覽:559
突破伺服器ip限制 發布:2025-01-11 17:11:23 瀏覽:818
支付寶上傳憑證 發布:2025-01-11 17:10:29 瀏覽:876
怎麼打開行李箱的密碼鎖 發布:2025-01-11 17:09:51 瀏覽:593
蘋果怎麼刪除id賬號和密碼 發布:2025-01-11 17:09:50 瀏覽:784
7z解壓很慢 發布:2025-01-11 16:51:23 瀏覽:942
電腦改文檔伺服器 發布:2025-01-11 16:41:14 瀏覽:870
編譯匯編語言實例 發布:2025-01-11 16:36:55 瀏覽:671