冒着我错过了一些显而易见的事情的风险.
我在表中插入一个记录,该表的字符串用于保存校验和值。
我试图插入以下记录:
插入control_table (field1,field2,field3,field4,CHECKSUM_FIELD)值(‘VALUE2 1’,‘VALUE2 2’,'VALUE3','VALUE4',MD5(‘VALUE1VALUE2VALUE3VALUE4’);
雪花不喜欢插入,告诉我:
SQL编译错误:值子句中的无效表达式MD5('VALUE1VALUE2VALUE3VALUE4')。
我不知道为什么不起作用,因为这句话很好用:
更新control_table SET CHECKSUM_FIELD = MD5('VALUE1VALUE2VALUE3VALUE4'),其中FIELD1 =‘VALUE1 1’;
发布于 2019-10-14 19:47:26
您的问题与INSERT语句中MD5函数的使用无关,而是一个事实,即值子句中的每个表达式必须是
此雪花文档页记录了此行为。
您的插入可以重写如下:
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5($5) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4', 'VALUE1VALUE2VALUE3VALUE4');由于您似乎希望传递给MD5()的值是其他4个表达式的连接,所以可以使用以下方法:
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5(CONCAT($1, $2, $3, $4)) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4');但是,要注意这样简单的连接表达式,因为CONCAT(1,2,3,45)将产生与CONCAT(12,3,4,5)相同的结果。通常,您可能希望在表达式之间插入分隔符以避免此类问题。在这种情况下,这可能是一种更适当的办法:
INSERT INTO control_table (field1, field2, field3, field4, CHECKSUM_FIELD)
SELECT $1, $2, $3, $4, MD5(ARRAY_TO_STRING(ARRAY_CONSTRUCT($1, $2, $3, $4),':')) FROM VALUES ('VALUE1', 'VALUE2', 'VALUE3', 'VALUE4');https://stackoverflow.com/questions/58380088
复制相似问题