标记 SQL Oracle 开发人员最佳实践
Posted
技术标签:
【中文标题】标记 SQL Oracle 开发人员最佳实践【英文标题】:Flag Best Practice in SQL Oracle developer 【发布时间】:2021-03-30 23:51:07 【问题描述】:我有一个问题,我刚刚在 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' ,'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
来存储可变长度的文本。
而且,在选择 In Oracle 中可以测量我的列的大小?
是的,你可以,尽管varchar2
有两个不同的变体来限制其长度,通过char
s 或byte
s,通过定义varchar2(50)
这将默认为char
, varchar2(64 byte)
,将提供 64 字节空间,因为某些字符占用超过一个字节
好的,谢谢,是或否我选择 vachar2( ? ) ?
【参考方案1】:
在 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,
data,
CASE
WHEN some_condition = 1
THEN 'YES'
ELSE 'NO'
END
FROM other_table;
【讨论】:
以上是关于标记 SQL Oracle 开发人员最佳实践的主要内容,如果未能解决你的问题,请参考以下文章