如何在Postgres中替换Oracle的ORA_HASH函数?

问题描述

如何在 Postgres 中替换Oracle的 ORA_HASH 功能?我希望实现已写入Oracle的Batch和merge逻辑,同样希望实现到Postgres。

SELECT disTINCT ACCNT_TYPE,ACCNT_SUB_TYPE,ACCNT_FROM_VAL,ACCNT_TO_VAL AS T_ACCNT_TO_VAL,ORA_HASH("NAME"||TO_CHAR(LIFECYCLE_DATE,'DD-MM-YYYY HH24:MI:SS')||LEGACY_ICA_TYPE||TO_CHAR(PURGE_DATE,'DD-MM-YYYY HH24:MI:SS')
||HUB_STATE_IND||LIFECYCLE_STATUS_CD||VAT_ID||LICENSED_SW||PRIMARY_ICA||TOKEN_ACCT_SRV_DESC) AS HASH_VAL
FROM C_ACCNT

ORA_HASH中提到的所有字段用于评估是否应该执行INSERT。UPSERT应该通过考虑所有这些字段来完成。

几乎相同的查询,但表名称在进行左外部联接时有所不同。同样,如果哈希值不同,则将其用于UPSERT。

为什么这个查询总是给我空响应?

select md5(p.src_id || p.type || p.accountName) 
FROM ACCOUNT p;

如果类型值为NULL,则DB为md5,结果为NULL。不好。

解决方法

如果您只需要一个字符串的哈希函数,请使用PostgreSQL内置的hashtext