标记 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 中,只有 VARCHAR2
或 CHAR
字符串数据类型适用于您的数据(NVARCHAR2
、NCHAR
和 CLOB
是不合适)。
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;
我有一个问题,我刚刚在 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 中,只有 VARCHAR2
或 CHAR
字符串数据类型适用于您的数据(NVARCHAR2
、NCHAR
和 CLOB
是不合适)。
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;