当前位置:  开发笔记 > 编程语言 > 正文

Postgres整数数组作为参数?

如何解决《Postgres整数数组作为参数?》经验,为你挑选了2个好方法。

据我所知,在Postgres pure中,您可以将整数数组传递给函数,但.NET数据提供程序Npgsql不支持这种情况.

我目前有一个DbCommand,我在其中加载对存储过程的调用,添加参数并执行标量以获取用于填充对象的Id.

现在需要将n个整数作为参数.这些用于创建子记录,将新创建的记录通过它的id链接到整数参数.

理想情况下,我不必为每个整数在我的DbCommand上进行多次ExecuteNonQuery调用,因此我将构建一个csv字符串作为将在数据库端拆分的参数.

我通常生活在使用Db抽象的LINQ 2 SQL中,使用手动数据访问来处理这个项目它只是变得有点脏,人们通常如何将这些参数传递给postgres?



1> vladr..:

请参阅:http://www.postgresql.org/docs/9.1/static/arrays.html

如果您的非本机驱动程序仍然不允许您传递数组,那么您可以:

传递数组的字符串表示形式(然后您的存储过程可以解析为数组 - 请参阅string_to_array)

CREATE FUNCTION my_method(TEXT) RETURNS VOID AS $$ 
DECLARE
       ids INT[];
BEGIN
       ids = string_to_array($1,',');
       ...
END $$ LANGUAGE plpgsql;

然后

SELECT my_method(:1)

用:1 = '1,2,3,4'

依靠Postgres本身从字符串转换为数组

CREATE FUNCTION my_method(INT[]) RETURNS VOID AS $$ 
       ...
END $$ LANGUAGE plpgsql;

然后

SELECT my_method('{1,2,3,4}')

选择不使用绑定变量并发出显式命令字符串,而不是拼写出所有参数(确保验证或转义来自外部的所有参数以避免SQL注入攻击.)

CREATE FUNCTION my_method(INT[]) RETURNS VOID AS $$ 
       ...
END $$ LANGUAGE plpgsql;

然后

SELECT my_method(ARRAY [1,2,3,4])



2> brichins..:

我意识到这是一个老问题,但我花了几个小时才找到一个好的解决方案,并认为我会传递我在这里学到的东西,并为别人解决问题.例如,尝试一下

SELECT * FROM some_table WHERE id_column = ANY(@id_list)

其中@id_list通过以下方式绑定到int []参数

command.Parameters.Add("@id_list", NpgsqlDbType.Array | NpgsqlDbType.Integer).Value = my_id_list;

其中command是NpgsqlCommand(在Visual Studio中使用C#和Npgsql).

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有