标记 SQL Oracle 开发人员的最佳实践

Flag Best Practice in SQL Oracle developer

我有一个问题,我刚刚在 CASE ( ... 'yes' 或 'No' 中创建了很多标志,我不知道以最小格式 VARCHAR 或VACHAR2 ?

喜欢这个:

-- 在 FO 中创建(标志)

CASE
WHEN CRE_DD.DIVISION  IN( 
    'Postinfo 1st line' ,
    'CX - CC INFODESK' ,
    'CC FO First Line' ,
    'CX - CC MIDDLE OFFICE'
)
OR  ( CRE_DD.DIVISION =  'FINES CC' AND DSR.ENTRY_CHANNEL = 'Phone')
THEN 'YES'
ELSE 'NO'
END   AS "Created in FO (flag)",

--FO处理(标志)

 CASE
 WHEN CUR_DD.DIVISION IN ('Postinfo 1st line' ,'CX - CC INFODESK','CC FO First Line' )
       
         OR  (CUR_DD.DIVISION =  'FINES CC' AND DSR.ENTRY_CHANNEL = 'Phone')
    
 THEN 'YES'
      ELSE 'NO'
           END AS "FO treatment (flag)",

在 Oracle 中,只有 VARCHAR2CHAR 字符串数据类型适用于您的数据(NVARCHAR2NCHARCLOB 是不合适)。

VARCHAR is a synonym of VARCHAR2;所以问你是否应该使用一个或另一个是没有意义的,因为它们是同一回事。只需使用 VARCHAR2 而不是使用其同义词。

不要使用 CHAR,因为它会用空格右填充字符串,因此您不会有 'NO',而是会有 'NO ',它可能并不总是表现良好正如在比较中预期的那样,必须 trim 尾随空格。

如果您使用的可变长度字符串可以是 'YES''NO',并且您想将它们放入 table 中,则将列定义为 VARCHAR2(3) .

例如:

CREATE TABLE your_table (
  id   NUMBER(10,0)
       GENERATED ALWAYS AS IDENTITY
       CONSTRAINT your_table__id__pk PRIMARY KEY,
  data NUMBER,
  flag VARCHAR2(3)
       NOT NULL
       CONSTRAINT your_table__flag__ck CHECK ( flag IN ( 'YES', 'NO' ) )
);

INSERT INTO your_table ( data, flag )
SELECT data,
       CASE
       WHEN some_condition = 1
       THEN 'YES'
       ELSE 'NO'
       END
FROM   other_table;

如果您正在使用视图,那么只需使用字符串文字 'YES''NO' 并允许 Oracle 隐式管理数据类型,您无需担心。

例如:

CREATE VIEW your_view ( id, data, flag ) AS
SELECT id,
       data,
       CASE
       WHEN some_condition = 1
       THEN 'YES'
       ELSE 'NO'
       END
FROM   other_table;