mysql - length - postgres array join



我怎样才能传递一个“数组”值到我的存储过程? (5)

你没有指出,但如果你指的是SQL服务器, 这是一种方法

和MS支持参考

我希望能够将一个“数组”值传递给我的存储过程,而不是串行调用“添加值”过程。

任何人都可以提出一个办法吗? 我在这里错过了什么吗?

编辑:我将使用PostgreSQL / MySQL,我还没有决定。


如果您打算使用MySQL 5.1,则无法传入数组。
看到MySQL 5.1 常见问题
如果你打算使用PostgreSQL,可以看看这里


可以肯定的是,这里是如何将数组添加到函数(stored-proc)调用中:

CallableStatement proc = null;
List<Integer> faultcd_array = Arrays.asList(1003, 1234, 5678);
//conn - your connection manager
conn = DriverManager.getConnection(connection string here);
proc = conn.prepareCall("{ ? = call procedureName(?) }");
proc.registerOutParameter(1, Types.OTHER);
//This sets-up the array
Integer[] dataFaults = faultcd_array.toArray(new Integer[faultcd_array.size()]);
java.sql.Array sqlFaultsArray = conn.createArrayOf("int4", dataFaults);
proc.setArray(2, sqlFaultsArray);
//:
//add code to retrieve cursor, use the data.
//:

我不知道如何传递一个实际的数组到这些引擎(我使用sqlserver),但是这里有一个传递一个分隔字符串的想法,并在你的存储过程中用这个函数解析它。

CREATE FUNCTION [dbo].[Split]
(
    @ItemList NVARCHAR(4000), 
    @delimiter CHAR(1)
)
RETURNS @IDTable TABLE (Item VARCHAR(50))  
AS      

BEGIN    
    DECLARE @tempItemList NVARCHAR(4000)
    SET @tempItemList = @ItemList

    DECLARE @i INT    
    DECLARE @Item NVARCHAR(4000)

    SET @tempItemList = REPLACE (@tempItemList, ' ', '')
    SET @i = CHARINDEX(@delimiter, @tempItemList)

    WHILE (LEN(@tempItemList) > 0)
    BEGIN
        IF @i = 0
            SET @Item = @tempItemList
        ELSE
            SET @Item = LEFT(@tempItemList, @i - 1)
        INSERT INTO @IDTable(Item) VALUES(@Item)
        IF @i = 0
            SET @tempItemList = ''
        ELSE
            SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
        SET @i = CHARINDEX(@delimiter, @tempItemList)
    END 
    RETURN
END  





stored-procedures