0

の代替を探していますCONNECT BY

Select SUBSTR(str,1,LEVEL) OUTPUT FROM
(
    SELECT 'ORACLE'  As str FROM DUAL
)
CONNECT BY LEVEL<=LENGTH(str);

助言がありますか?

4

3 に答える 3

6

いくつかのオプション:

SQL フィドル

クエリ 1 - コレクションを使用します

ここでは値がハードコーディングされているため、固定長のリストがない限り、これはおそらく最善の解決策ではありません。

SELECT SUBSTR( 'ORACLE', 1, COLUMN_VALUE ) AS value
FROM   TABLE( SYS.ODCINUMBERLIST( 1, 2, 3, 4, 5, 6 ) )

結果

|  VALUE |
|--------|
|      O |
|     OR |
|    ORA |
|   ORAC |
|  ORACL |
| ORACLE |

クエリ 2 - パイプライン関数を使用してコレクションを生成します

CREATE OR REPLACE FUNCTION get_numbers (
  maximum IN NUMBER
) RETURN SYS.ODCINUMBERLIST PIPELINED AS
BEGIN
  FOR i IN 1 .. maximum LOOP
    PIPE ROW(i);   
  END LOOP;
  RETURN;
END;
/

SELECT SUBSTR( 'ORACLE', 1, COLUMN_VALUE ) AS value
FROM   TABLE( get_numbers( LENGTH( 'ORACLE' ) ) )

結果

|  VALUE |
|--------|
|      O |
|     OR |
|    ORA |
|   ORAC |
|  ORACL |
| ORACLE |

クエリ 3 - パイプライン化されていない関数を使用してコレクションを生成する:

CREATE OR REPLACE FUNCTION get_numbers2 (
  maximum IN NUMBER
) RETURN SYS.ODCINUMBERLIST
AS
  v_nums SYS.ODCINUMBERLIST := SYS.ODCINUMBERLIST();
BEGIN
  v_nums.EXTEND( maximum );
  FOR i IN 1 .. maximum LOOP
    v_nums(i) := i;   
  END LOOP;
  RETURN v_nums;
END;
/

SELECT SUBSTR( 'ORACLE', 1, COLUMN_VALUE ) AS value
FROM   TABLE( get_numbers2( LENGTH( 'ORACLE' ) ) )

結果

|  VALUE |
|--------|
|      O |
|     OR |
|    ORA |
|   ORAC |
|  ORACL |
| ORACLE |

クエリ 4 - 再帰サブクエリ ファクタリングを使用します

WITH data ( value ) AS (
  SELECT 'ORACLE' FROM DUAL
  UNION ALL
  SELECT SUBSTR( value, 1, LENGTH( value ) - 1 )
  FROM   data
  WHERE  LENGTH( value ) >  1
)
SELECT * FROM data

結果

|  VALUE |
|--------|
| ORACLE |
|  ORACL |
|   ORAC |
|    ORA |
|     OR |
|      O |
于 2015-10-12T23:03:30.713 に答える
-3

これがピラミッドプログラムです。

SELECT RPAD(LPAD('ILOVEYOU',ROWNUM,'ILOVEYOU'),9) ||LPAD(RPAD('ILOVEYOU',ROWNUM,'ILOVEYOU'),9)LOVEGRAPH FROM EMP WHERE ROWNUM<9 UNION ALL SELECT * FROM( SELECT RPAD(LPAD('ILOVEYOU',ROWNUM,'ILOVEYOU'),9) ||LPAD(RPAD('ILOVEYOU',ROWNUM,'ILOVEYOU'),9)LOVEGRAPH FROM EMP WHERE ROWNUM<9 ORDER BY ROWNUM DESC) /

ラブグラフ

II IL IL ILO ILO ILOVE ILOVE ILOVE ILOVEY ILOVEY ILOVEYO ILOVEYO ILOVEYOU ILOVEYOU ILOVEYOU ILOVEYOU ILOVEYO ILOVEY ILOVEY ILOVE ILOVE ILOV ILOV ILO ILO IL IL II

16 行が選択されました

于 2015-10-14T04:04:10.877 に答える
-3

SELECT RPAD(LPAD('ORACLE',ROWNUM,'ORACLE'),7) AS GRAPH from emp where rownum <7

于 2015-10-14T04:00:44.157 に答える