-1

我开始在 Oracle 中创建一个序列。在浏览 oracle 文档时,我得到了这个原型

Create Sequence SeqTest5
Start With 0
Increment by 1
Min value 0
Maxvalue 8
NoCycle    --I got to know we can give this as 'Cycle' which will again
           -- Repeat the loop. But my doubt is why cannot we specify  number of 
           -- Loops. Such as Cycle 20             
NoCache    --I got to know we can give certain buffer lenght via cache

你能解释一下为什么我们不能声明它,因为我已经尝试过并得到了这个错误

1  create sequence seqtest4
2  cache 30,
3* cycle 20,
SQL> /
cache 30,
    *
ERROR at line 2:
ORA-00933: SQL command not properly ended

例如:-

TNUM
     0
     1
     4
     2
     3
     5
     6
     7
     8

这个0-8应该写10次就停止。

4

2 回答 2

1

您不能指定循环次数;只是你是否想骑自行车。CREATE SEQUENCE语法在这里

你的上面有几个问题CREATE SEQUENCE

  • 逗号——它们不属于;只是摆脱他们。
  • 指定CYCLE 20- 您可以指定CYCLENOCYCLE仅指定。默认值为NOCYCLE.
  • 如果您指定CYCLE,您还必须指定一个MAXVALUE.

附录:根据实际要求更新的问题,即数1-8十次。这是没有序列的方法;它基于用于生成数字序列的常用 Oracle 技巧:

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 8

上面的语句将按顺序输出数字 1 到 8。要重复十次,您需要再做一个“1 到 10”计数器,然后将其交叉连接到“1 到 8”,然后确保它的顺序正确。这使事情变得有点复杂,这可以在最终答案中看到:

SELECT SeqCounter FROM (
  SELECT SeqCounter, CycleCounter FROM (
    SELECT LEVEL AS SeqCounter FROM DUAL CONNECT BY LEVEL <= 8)
  CROSS JOIN (
    SELECT LEVEL AS CycleCounter FROM DUAL CONNECT BY LEVEL <= 10)
) ORDER BY CycleCounter, SeqCounter

上面的语句将给出问题中要求的输出。

于 2013-04-07T17:39:55.383 回答
0

这不是最好用模函数处理吗?

CREATE SEQUENCE seqtest5 START WITH 0 INCREMENT BY 1 MINVALUE 0 MAXVALUE 80 NOCYCLE;

SELECT mod(seqtest5.nextval, 9) from dual;

0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, ...

ORA-08004: sequence SEQTEST5.NEXTVAL exceeds MAXVALUE and cannot be instantiated
于 2014-07-14T16:06:29.507 回答