fa1*_*n3r 2 oracle oracle-11g sequence
我想在一个WITH
包含这个等差数列的子句中生成一个命名表:
????????????
? mynumber ?
????????????
? 0 ?
? 30 ?
? 60 ?
? 90 ?
? 120 ?
? 150 ?
? 180 ?
? 210 ?
????????????
Run Code Online (Sandbox Code Playgroud)
...基于变量p_maxnumber
(p_maxnumber
例如此处= 211)。
理想情况下,它将采用以下格式:
WITH sequenceTable AS
(SELECT mynumber
FROM ...),
Run Code Online (Sandbox Code Playgroud)
在同一WITH
个子句中,我想在下游派生表中使用该序列来获取数据并最终用作图表呈现的时间轴。我有一种感觉有一种方法可以使用创建序列来做到这一点?只是想找到一种方法来创造这个仍然......
您可以使用 CONNECT BY 查询生成任意序列:
SQL> variable v_step NUMBER
SQL> variable v_maxnumber NUMBER
SQL> exec :v_step := 30; :v_maxnumber := 211;
PL/SQL procedure successfully completed
SQL> WITH sequenceTable AS (
2 SELECT (LEVEL - 1) * :v_step myNumber
3 FROM DUAL
4 CONNECT BY (LEVEL - 1) * :v_step <= :v_maxnumber)
5 SELECT * FROM sequenceTable;
MYNUMBER
----------
0
30
60
90
120
150
180
210
8 rows selected
Run Code Online (Sandbox Code Playgroud)
您还可以使用流水线函数:
SQL> CREATE OR REPLACE TYPE tab_number IS TABLE OF NUMBER;
2 /
Type created
SQL> CREATE OR REPLACE FUNCTION arithmetic_sequence (p_step NUMBER, p_maxvalue NUMBER)
2 RETURN tab_number
3 PIPELINED
4 IS
5 BEGIN
6 FOR i IN 0..p_maxvalue/p_step LOOP
7 PIPE ROW (i*p_step);
8 END LOOP;
9 RETURN;
10 END;
11 /
Function created
SQL> SELECT COLUMN_VALUE myNumber FROM TABLE(arithmetic_sequence(30, 211));
MYNUMBER
----------
0
30
60
90
120
150
180
210
8 rows selected
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1078 次 |
最近记录: |