我正在尝试更新 Oracle 中的表。该表是使用以下 DDL 创建的:
CREATE TABLE TEST (
ID_NUM INTEGER,
NAME INTEGER,
VALUE INTEGER,
ITEMS_NUM INTEGER,
)
并且有一些数据注入到这个表中。现在,我需要更新表以将ID_NUM列更改为 VARCHAR 并将格式化的 UUID 添加为默认值。
我遵循了下面给出的查询:
CREATE OR REPLACE FUNCTION RANDOM_UUID RETURN VARCHAR IS
V_UUID VARCHAR(255);
BEGIN
SELECT REGEXP_REPLACE(RAWTOHEX(SYS_GUID()), '([A-F0-9]{8})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{12})', '\1-\2-\3-\4-\5') INTO V_UUID FROM DUAL;
RETURN V_UUID;
END RANDOM_UUID;
ALTER TABLE TEST
DROP COLUMN ID_NUM;
ALTER TABLE TEST
ADD ID_NUM VARCHAR(255) DEFAULT random_uuid() NOT NULL;
它给出了一个错误,因为SQL Error [4044] [42000]: ORA-04044: procedure, function, package, or type is not allowed here
我已经使用以下命令执行和验证了该函数,它给出了一个有效的格式化 UUID。
SELECT RANDOM_UUID() FROM DUAL;
ALTER 表语句中可能存在什么问题。我们不能在 Oracle 中使用一个函数来设置默认值吗?
提前致谢。
我认为您可以使用default clause
on the column
but without function
(只需将function
调用替换为function
indefault
子句的内容)来实现它,如下所示。(请注意,User functions
不允许在default clause
)
ALTER TABLE TEST ADD ID_NUM VARCHAR(255) DEFAULT REGEXP_REPLACE(RAWTOHEX(SYS_GUID()), '([A-F0-9]{8})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{12})', '\1-\2-\3-\4-\5') NOT NULL;
我已经准备了分贝<>小提琴演示向您展示与错误function
不和成功function
。
干杯!!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句