【发布时间】:2020-04-23 23:40:36
【问题描述】:
我需要通过添加一个默认值为 UUID 且数据类型为 VARCHAR(255) 的新列来更新现有表。
我尝试通过编写如下函数来实现它:
CREATE FUNCTION UUID_FUNC()
RETURNS VARCHAR(255)
LANGUAGE SQL
BEGIN ATOMIC
DECLARE UUID VARCHAR(4000);
SET UUID = (SELECT TRIM(CHAR(HEX(GENERATE_UNIQUE()))) from sysibm.sysdummy1);
RETURN UUID;
END
并在查询中将其用作:
ALTER TABLE <Table-name>
ADD ID_VALUE VARCHAR(255) NOT NULL DEFAULT (UUID_FUNC())
执行上述查询时出现以下错误:
SQL Error [42601]: An unexpected token "DEFAULT" was found following "ARCHAR(255) NOT NULL".
Expected tokens may include: "CHECK".. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.59.81
在 ALTER 查询中调用自定义函数的正确格式是什么,或者有任何建议来实现上述要求。
提前致谢。
【问题讨论】:
-
您不能在
DEFAULT子句中指定函数名。检查CREATE TABLE 语句中的Default-values可能选项。真的有必要使用varchar(255)和generate_unique吗?为什么不使用一些数字(int/bigint/decimal)数据类型的生成列? -
应该提到 Db2 的平台和版本,但我认为在这种情况下不会有什么不同。
标签: database function db2 uuid alter-table