PostgreSQL中operator does not exist错误解决(bigint=text)
解决PostgreSQL中"operator does not exist: bigint = text"错误
错误原因
虽然表字段BENMASTDTL_PAYEE_MOB_NUM是bigint类型,但你传入的参数P_BEN_MOB_NUM是text类型。PostgreSQL不会自动隐式转换这两种类型进行等值比较,因此触发类型不匹配错误。
解决方法
方法1:显式转换参数类型
在USING子句中将P_BEN_MOB_NUM强制转换为bigint,修改后的代码如下:
ELSIF P_TRANSFER_TYPE = '7M' THEN EXECUTE 'SELECT BENMASTDTL_BEN_CODE FROM BENMASTDTL WHERE BENMASTDTL_ENTITY_CODE =$1 AND BENMASTDTL_CUSTOMER_CODE =$2 AND BENMASTDTL_PAYEE_MOB_NUM =$3 AND BENMASTDTL_PAYEE_MMID=$4 AND BENMASTDTL_PAYEE_MMID_TYPE=$5 LIMIT 1' INTO STRICT W_BENMASTDTL_BEN_CODE USING P_ENTITY_CODE, P_CUST_CODE, P_BEN_MOB_NUM::bigint, P_BEN_MMID, P_BEN_MMID_TYPE;
方法2:修正参数声明类型
如果P_BEN_MOB_NUM从业务逻辑上就应该是数值类型,直接修改该参数的声明类型为bigint,从根源避免类型不匹配问题。
额外注意事项
如果P_BEN_MOB_NUM可能包含非数字字符,强制转换前建议先做格式校验,避免转换失败抛出异常,示例代码:
IF P_BEN_MOB_NUM !~ '^[0-9]+$' THEN RAISE EXCEPTION '手机号格式无效,必须为纯数字'; END IF;
内容的提问来源于stack exchange,提问作者sp k
相关产品推荐
相关产品推荐

