java와 Oracle 에서의 사용법은 서치해보니 많이 나온다. 

c# 과 Mssql 의 경우도 서치하면 정보가 많다. 

DataTable 혹은 oracle.sql.ARRAY 등을 이용한 내용들..


하지만, java 와 Mssql 에서의 방법에 대해서는 없다.


그래서 찾던 중 Mssql 의 Type 활용하여 해결하였다.




먼저 사용자정의 타입을 생성해야 한다.


1.

CREATE TYPE UserDataType AS TABLE   
( 
ID Int, 
TextData varchar(255),
DateValue datetime
)


그리고 프로시저 생성시 파라미터로 위에 생성한 타입을 받는다.


2.

Create proc p_TestProc
(
@UserDataType dbo.UserDataType ReadOnly
)
as
--Select from the Table Type passed to SP
Select * from @UserDataType

GO


그런 뒤 호출한다.


3.

Declare @UserDataType dbo.UserDataType

Insert into @UserDataType
SELECT 1, 'SomeText', getdate()

Exec p_TestProc @UserDataType



Mybatis 안에서는 위 3번의 내용을 수정하면 된다.

<select id="testSelect" parameterType="map" resultType="map>

Declare @UserDataType dbo.UserDataType Insert into @UserDataType     <foreach collection="list" item="item" separator=",">

(#{item.id}, #{item.textData}, #{item.dateValue})

</foreach>


Exec p_TestProc @UserDataType

</select>



참고 : https://social.msdn.microsoft.com/Forums/SqlServer/en-US/d63bfb5f-27d6-4124-b1f3-fe2c6faf8a0a/array-as-stored-procedure-parameter?forum=transactsql

+ Recent posts