在过程中在PostgreSQL上使用TEXT
时尝试将数据类型从BIGINT
转换为WHERE IN
时,我遇到了问题。这总是给出
运算符不存在:bigint = text。尝试在查询中强制转换变量。
但仍然得到同样的通知。这是示例查询:
DECLARE
-- $1 params text
BEGIN
SELECT * FROM table_a where
colId IN($1); // notice is here, colId is bigint
END
/*Call the procedure*/
SELECT my_function('1,2,3,4,5');
我们如何投射变量?谢谢!
答案 0 :(得分:2)
使用字符串作为id列表是错误的设计。您可以在PostgreSQL中使用数组。
例如
CREATE OR REPLACE FUNCTION foo(VARIADIC ids int[])
RETURNS SETOF table_a AS $$
SELECT * FROM table_a WHERE id = ANY($1)
$$ LANGUAGE sql;
SELECT foo(1,2,3);
但是,通常将简单的SQL包装到函数中看起来就像破碎的设计。程序不应取代观点。