通过 Oracle 中的函数更改表并添加具有默认值的新列

维图尔萨

我正在尝试更新 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 clauseon the columnbut without function(只需将function调用替换functionindefault子句的内容来实现它,如下所示。(请注意,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章