首页 > 解决方案 > 无法使用 bitnot 反转 bitand 值,例如在 pl/sql 中从 1 到 0

问题描述

创建一个虚拟列,其值使用其他 3 列计算 -

CREATE TABLE emp (
  id          NUMBER,
  comm1       number,
  comm2       number,
  comm3       number,
  comm4        number GENERATED ALWAYS AS
                
((comm1 - bitand(comm1, comm2) + comm2) - bitand((comm1 - bitand(comm1, comm2) + comm2),comm3)+comm3)  VIRTUAL,
              
  CONSTRAINT employees_pk PRIMARY KEY (id)
); 

如果我插入-

INSERT INTO emp (id,comm1, comm2,comm3)
VALUES (3, 1,1,1);

comm4 列的值为 1,我想要 0, 如何反转它。

标签: sqloraclebitwise-operatorsddl

解决方案


如果我们使用模块运算符,我们可以将 0 反转为 1 并将 1 反转为 0,但我认为你必须在你的逻辑表达式中工作,我无法理解,因为我不知道上下文

有一个解决方案适合您:

CREATE TABLE emp (
  id          NUMBER,
  comm1       number,
  comm2       number,
  comm3       number,
  comm4        number GENERATED ALWAYS AS  ( mod ( 1 , ((comm1 - bitand(comm1, comm2) + comm2) - bitand((comm1 - bitand(comm1, comm2) + comm2),comm3)+comm3) ) ) VIRTUAL,
  CONSTRAINT employees_pk PRIMARY KEY (id)
)

推荐阅读