尝试将表更新为在case语句中使用DEFAULT关键字值时出现语法错误,如下所示:
UPDATE tbl
SET status =
CASE
WHEN ( st.status = '' ) THEN ( DEFAULT )
ELSE ( ROUND( CAST(st.status as numeric) ) )
END
FROM sourceTable st
这是错误:
ERROR: syntax error at or near "DEFAULT"
LINE 4: ... WHEN ( tc.status = '''' ) THEN ( DEFAULT )
暂时查看文档,我看不出这违反了任何语句构造规则。
以前的代码使用NULL确实有效
UPDATE tbl
SET status =
CASE
WHEN ( st.status = '' ) THEN ( NULL )
ELSE ( ROUND( CAST(st.status as numeric) ) )
END
FROM sourceTable st
我的目标是将列更新为默认值,如果源表列中有空字符串,则为NULL。
使用NULL工作正常但当然将列更新为NULL,并且我认为对DEFAULT的更改会起作用 - 任何人都可以帮助进行语法更正或替代吗?
这段代码是由处理不同场景中的各种列的东西生成的,因此不会寻找任何替代问题的方法(尽管我对任何响应都是开放的) - 只是在可能的情况下寻找修复,或者解释为什么语法不起作用。谢谢!
答案 0 :(得分:3)
PostgreSQL documentation for UPDATE syntax似乎表示您可以将列设置为表达式或单词DEFAULT
,但不能设置为包含关键字DEFAULT
的表达式。
SET column_name = { expression | DEFAULT }
此语法参考意味着=
的右侧可以是表达式,也可以是DEFAULT
。 { X | Y }
的符号表示" X或Y,只选择一个。"
使用DEFAULT
关键字的选择不会出现在documentation for value expressions中。 DEFAULT
可以在INSERT
或UPDATE
中用作特殊情况分配,但仅作为值表达式的替代,而不是更复杂表达式的一部分。
要解决这个问题,您可能必须从information_schema.columns.column_default
读取相应表和列的列的DEFAULT值,然后在UPDATE语句中逐字使用该值。