【问题标题】:Flag Best Practice in SQL Oracle developer标记 SQL Oracle 开发人员最佳实践
【发布时间】: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 有两个不同的变体来限制其长度,通过chars 或bytes,通过定义varchar2(50) 这将默认为charvarchar2(64 byte),将提供 64 字节空间,因为某些字符占用超过一个字节
  • 好的,谢谢,是或否我选择 vachar2( ? ) ?

标签: sql oracle sqldatatypes


【解决方案1】:

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

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;

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多