1

これは簡単なことですが、本当にわかりません。

私はこの単純なテーブルを取得しようとしています:

NUMBER
1
2
3

だから私はこれを試します:

select (1,2,3) as number from dual;

そして私は得る

ORA-00907: 右括弧がありません 00907. 00000 - "右括弧がありません"

この静的テーブルを作成するにはどうすればよいですか?

編集:申し訳ありませんが、表を単純化しましたが、もっと明確にする必要がありました。私の数字は 1、2、3 ではなく、1 から 10,000 の間の約 50 個の数字です。これはできないように聞こえますか?

4

3 に答える 3

3

この「トリック」はそれを行います:

select n
from (select rownum n from dual
      connect by level <= 3);
于 2012-04-02T15:29:08.597 に答える
1

Oracle 10g以降では、次のことができます。

SELECT LEVEL "NUMBER"
FROM DUAL
CONNECT BY LEVEL <= 3

明らかに、これは必要に応じて3つよりも多くの数を生成するように簡単に変更できます。

- - 編集 - -

数値の静的リストについては、次のようにすることができます。

SELECT 1 FROM DUAL
UNION ALL
SELECT 2 FROM DUAL
UNION ALL
SELECT 3 FROM DUAL
-- etc...

または、複数の場所から使用する必要がある場合は、データを一時テーブルに配置します。

CREATE GLOBAL TEMPORARY TABLE TMP_TABLE (
    "NUMBER" INT PRIMARY KEY
);

INSERT INTO TMP_TABLE VALUES (1);
INSERT INTO TMP_TABLE VALUES (2);
INSERT INTO TMP_TABLE VALUES (3);

SELECT * FROM TMP_TABLE;
于 2012-04-02T15:33:25.987 に答える
0

「この静的テーブルを作成するにはどうすればよいですか?」の意味がわかりません。静的テーブルについて考えるとき、次のようなものを考えます。

SQL> create table t (n number);

Table created.

SQL> insert into t values (1);

1 row created.

SQL> insert into t values (5000);

1 row created.

SQL> -- ....
SQL> insert into t values (10000);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t;

         N
----------
         1
      5000
     10000

デュアルを使用するには:

SQL> select *
  2  from (select 1 as n from dual
  3      union all select 5000 from dual
  4      -- ...
  5      union all select 10000 from dual);

         N
----------
         1
      5000
     10000

列に名前を付けないでくださいnumber。予約語 for を列名として使用しても、良い結果は得られません。

于 2012-04-02T15:56:06.643 に答える