當前位置:首頁 » 存儲配置 » 存儲過程傳集合

存儲過程傳集合

發布時間: 2023-05-12 23:47:43

❶ ORACLE 中 儲存過程我現在要傳一個參數 得到LIST集合 不要輸出參數吧

1.存儲過程中:需要定義輸出參數 out outlist;
2.Hibernate中接受,使用sqlQuery進行查詢,用它的對象調用list方法。

❷ mysql的存儲過程怎麼傳入數組參數

沒試過往裡面傳數組,一般都是多傳幾個參數,把幾個參數放入SqlParameter[]中,然後cmd.Parameters.AddRange(pars);
創建方法:
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@PageIndex","ccc"),
new SqlParameter("@PageSize","ccc"),
new SqlParameter("@StrSql","ccc")
};
ccc就是你想傳入的值,帶@的就是你在存儲過程中定義的參數。
算是一種另類的數組吧。要不你就把所有條件組合成一個字元串,中間用特殊符號隔開,到資料庫用split方法再分回來,不過這個方法比較麻煩,不推薦

❸ 如何向sql server存儲過程傳遞一個數組

仔細研究後在csdn上找到了解決該問題的辦法帖出來給大家共享一下
大致方法是利用傳遞長字元串的形式向存儲過程傳遞一個長字元串。由於sqlserver沒有 splite函數
所以必須自己定義一個splite函數來進行處理
自定義一個函數
create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(F1 varchar(100))asbegindeclare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)while @i=1begininsert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)endif @SourceSql<''
insert @temp values(@SourceSql)returnend-執行select * from dbo.f_splitstr('1,2,3,4',',')
注:'1,2,3,4'即你所傳遞的字元串
同樣你可以通過 select cunt(*) from dbo.f_splitstr('1,2,3,4',',')
獲得該字元串數組的長度
如果要刪除該函數使用--刪除函數drop function fsplit

❹ oracle 存儲過程,如何傳入一個數組

這個是不行的,數組內容必須首先在存儲過程里定義好數組類型,然後給予定義好的數據類型定義數組型變數。存儲過程的入參是做不到的。一般情況下,採用字元串的方式,並給每項用特定的分隔符的方式傳入,然後在存儲過程中按照分隔符解析出每一項,插到存儲過程的定義的數組的每一項上去。

❺ 如何向存儲過程傳遞一個數組參數

方法一 分割

例:通過SQL Server存儲過程傳送數組參數刪除多條記錄

eg. ID 值為'1,2,3' 以下存儲過程就是刪除表中id號為1,2,3的記錄:

CREATE PROCEDURE DeleteNews
@ID nvarchar(500)
as
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TId int
Set @PointerPrev=1

while (@PointerPrev < LEN(@ID))
Begin
Set @PointerCurr=CharIndex(',',@ID,@PointerPrev)
if(@PointerCurr>0)
Begin
set @TId=cast(SUBSTRING(@ID,@PointerPrev,@PointerCurr-@PointerPrev) as int)
Delete from News where ID=@TID
SET @PointerPrev = @PointerCurr+1
End
else
Break
End
--刪除最後一個,因為最後一個後面沒有逗號,所以在循環中跳出,需另外再刪除
set @TId=cast(SUBSTRING(@ID,@PointerPrev,LEN(@ID)-@PointerPrev+1) as int)
Delete from News where ID=@TID
GO

這個方法麻煩不?於是又有另外一種方法——臨時表

方法二 Table對象

傳3個參數,都是數組形式還有時間類型用存儲過程更新

@Oid = 1,2,3,4

@Did = 111,222,333,444

@DateArr = '2007-1-1,2007-1-2,2007-1-3,2007-1-4'

CREATE proc Test999

@Oid nvarchar(1000) --ID1

,@Did nvarchar(1000) --ID2

,@DateArr nvarchar(1000) --日期

AS

DECLARE @id1s varchar(8000), @id2s varchar(8000), @dates varchar(8000)

set @id1s=@Oid

set @id2s=@Did

set @dates = @DateArr

-- 調用函數實現處理

SELECT @id1s=@id1s, @id2s=@id2s,@dates = @dates

UPDATE A SET terminate_time = B.dt

FROM [Table] A,(

SELECT

id1 = CONVERT(int, Desk_id.value),

id2 = CONVERT(int, room_id.value),

dt = CONVERT(datetime, terminate_time.value)

FROM dbo.f_splitstr(@id1s) Desk_id, dbo.f_splitstr(@id2s) room_id, dbo.f_splitstr(@dates) terminate_time

WHERE Desk_id.id = room_id.id

AND Desk_id.id = terminate_time.id

) B

WHERE A.Desk_id = B.ID1 AND A.room_id = B.ID2

GO這個還用到一個函數f_splitstr

CREATE FUNCTION dbo.f_splitstr(

@str varchar(8000)

)RETURNS @r TABLE(id int IDENTITY(1, 1), value varchar(5000))

AS

BEGIN

DECLARE @pos int

SET @pos = CHARINDEX(',', @str)

WHILE @pos > 0

BEGIN

INSERT @r(value) VALUES(LEFT(@str, @pos - 1))

SELECT

@str = STUFF(@str, 1, @pos, ''),

@pos = CHARINDEX(',', @str)

END

IF @str > ''

INSERT @r(value) VALUES(@str)

RETURN

END

熱點內容
tomcat上傳超時 發布:2025-02-09 01:41:42 瀏覽:483
androidactivity豎屏 發布:2025-02-09 01:41:40 瀏覽:377
家庭配置怎麼合理 發布:2025-02-09 01:36:14 瀏覽:807
頭條軍事源碼 發布:2025-02-09 01:31:53 瀏覽:997
androidintent視頻 發布:2025-02-09 01:31:43 瀏覽:858
歐姆龍plc密碼如何設置 發布:2025-02-09 01:24:31 瀏覽:687
php支持jpeg 發布:2025-02-09 01:24:22 瀏覽:803
反編譯去注冊碼 發布:2025-02-09 01:19:48 瀏覽:887
安卓如何查找舊密碼 發布:2025-02-09 01:17:21 瀏覽:418
hadoop雲存儲 發布:2025-02-09 01:02:49 瀏覽:453