执行简单查询时出现运算符不匹配错误。是什么原因造成的?
我正在使用JDBC preStmt.setInt(1, Integer.parseInt(user));
dev_db=# \d+ registrants
Table "public.registrants"
Column | Type | Modifiers | Storage | Description
--------------+--------------------------+--------------------+----------+-------------
user | enum12 | not null | plain |
degree | text | | extended |
答案 0 :(得分:0)
我假设enum12
是使用CREATE TYPE enum12 AS ENUM (...)
创建的。
问题是你无法自动将整数转换为枚举数据类型(但它适用于字符串)。
如果确实需要能够将整数转换为enum12
,则可以使用以下内容:
CREATE OR REPLACE FUNCTION int_to_enum12(integer) RETURNS enum12
LANGUAGE sql IMMUTABLE STRICT AS
$$SELECT enumlabel::enum12
FROM pg_catalog.pg_enum
WHERE enumsortorder = $1
AND enumtypid = 'enum12'::regtype$$;
CREATE CAST (integer AS enum12)
WITH FUNCTION int_to_enum12(integer)
AS IMPLICIT;
然后你的例子可能会有用。
备注:强>
NULL
。向数据库中添加隐式强制转换将增加SQL语句的歧义,从而导致更多错误,如:
ERROR: operator is not unique: ...
HINT: Could not choose a best candidate operator. You might need to add explicit type casts.
我认为你最好不要改写查询,这样你就不需要进行类型转换。