在Oracle列中验证GUID值

3

我在Oracle 10g表的一列中存储GUID。该列的数据类型为Varchar(2)。现在我想检查此列中的值是否为有效的GUID。

我该如何在Oracle中查询以检查这些值是否为有效的GUID?


考虑到GUID比2个字符更大,我会为您省去麻烦并告诉您,不,它们无效。 - Brian Roach
抱歉,该列的长度为200。 - acadia
2个回答

3

我已经从这里获取了测试样本,并从这里获取了正则表达式:

create table guids ( guid varchar(36) );
insert into guids values ( 'BC1EAAAF-1B5A-4695-9797-3ED6C99B7FC5' );
insert into guids values ( 'BCXXAAAF-1B5A-4695-9797-3EDXXXXXXFC5' );
insert into guids values ( '-jk1029347 lka llur 193241 lk;qed' );

select guid,
    case when regexp_like(guid,
'^({|\()?[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}(}|\))?$'
    )
  then 'Y'
  else 'N'
  end AS is_valid
from guids;

GUID                                 IS_VALID 
------------------------------------ -------- 
BC1EAAAF-1B5A-4695-9797-3ED6C99B7FC5 Y        
BCXXAAAF-1B5A-4695-9797-3EDXXXXXXFC5 N        
-jk1029347 lka llur 193241 lk;qed    N        

0

我猜你指的是VARCHAR2。VARCHAR(2)将会是一个非常短的GUID。

我不会把这些值存储在数据库中,然后再验证它们是否正确。先验证它们是否正确,然后再存储它们。使用检查约束或触发器。这样,你就知道你的数据库里是好数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接