Oracle10g 验证Oracle列中的GUID值

Oracle10g 验证Oracle列中的GUID值,oracle10g,guid,Oracle10g,Guid,我将guid存储在oracle10g表的一列中。列的数据类型是Varchar(2)。 现在我想检查此列中的值是否是有效的guid 如何在Oracle中查询以检查这些值是否为有效的GUID?我猜您指的是VARCHAR2。VARCHAR(2)将是一个非常短的GUID 我不会将这些值存储在数据库中,然后验证它们是否正确。验证它们是否正确,然后存储它们。使用检查约束或触发器。这样,您就知道数据库中的数据是好数据。我从以下位置获取了测试样本和regexp: 考虑到guid大于2个字符,我将省去您的麻烦并告

我将guid存储在oracle10g表的一列中。列的数据类型是Varchar(2)。 现在我想检查此列中的值是否是有效的guid


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

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


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

我从以下位置获取了测试样本和regexp:


考虑到guid大于2个字符,我将省去您的麻烦并告诉您,不,它们无效。我的错误是,列的长度是200
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