如何解决标记 SQL Oracle 开发人员的最佳实践
我有一个问题,我刚刚在 CASE 中创建了很多标志(...“是”或“否”,我不知道以最小格式转换为 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','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 '
并且它可能并不总是按预期运行在比较中,并且必须修剪尾随空格。
如果您使用的变长字符串可以是 'YES'
或 'NO'
,并且您想将它们放入表中,则将该列定义为 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,CASE
WHEN some_condition = 1
THEN 'YES'
ELSE 'NO'
END
FROM other_table;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。