在Oracle序列中生成相同的正数和负数

Onk*_*ari 4 sql oracle plsql sequence

如何在oracle中通过序列生成以下数字

2
-2
2
-2
2
-2
Run Code Online (Sandbox Code Playgroud)

等等.我可以1,2,1,2,1,2通过循环生成,但上面我不能使用逻辑.

Ale*_*ole 13

这似乎是一个奇怪的序列要求,但如果你真的想要那么你可以这样做:

create sequence weird_seq
start with 2
increment by 4
maxvalue 2
minvalue -2
cycle
nocache;

select weird_seq.nextval from dual
connect by level <= 10;

   NEXTVAL
----------
         2
        -2
         2
        -2
         2
        -2
         2
        -2
         2
        -2
Run Code Online (Sandbox Code Playgroud)

increment 4是从-2到+2的步数.该maxval 2是这样下一次调用cycle是圆的minval -2.它需要从+/- 2开始.这nocache是不幸的,但是必要的,否则你会得到"ORA-04013:CACHE的数字必须小于一个周期".

如果您只是将这些数字用作查询的一部分,那么您可以使用分层查询来代替:

select 2 * (2 * mod(level, 2) - 1)
from dual
connect by level <= 10;

2*(2*MOD(LEVEL,2)-1)
--------------------
                   2
                  -2
                   2
                  -2
                   2
                  -2
                   2
                  -2
                   2
                  -2
Run Code Online (Sandbox Code Playgroud)

但是多次运行总是从+2开始,这可能不是你想要的.(取决于它将如何使用......)

您可能还可以使用分析查询从现有数据中动态生成数字,但同样,它取决于您将使用此数据.