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开始,这可能不是你想要的.(取决于它将如何使用......)
您可能还可以使用分析查询从现有数据中动态生成数字,但同样,它取决于您将使用此数据.