0

Oracleで英数字シーケンスを作成したい。テーブル名はrel_details4 つの列で構成されています。

rel_id
rel_name
rel_modified_date
rel_desc

のようなIDrel_idを生成したいREL230420151001

RELは文字列、 23042015は今日の日付、 1001は開始番号です。

このタイプ シーケンスの作成方法。

4

3 に答える 3

1

12cを使用している場合は、 IDENTITY 列VIRTUAL 列を使用する 1 つの方法を次に示します。

ID 列はバージョン 12c で導入され、仮想列はバージョン 11g で導入されました。

SQL> CREATE TABLE t
  2            (
  3              ID NUMBER GENERATED ALWAYS AS IDENTITY
  4              START WITH 1000 INCREMENT BY 1,
  5              text VARCHAR2(50),
  6              dt DATE DEFAULT SYSDATE,
  7              my_text varchar2(1000) GENERATED ALWAYS AS (text||to_char(dt, 'DDMMYYYY')||ID) VIRTUAL
  8            );

Table created.

SQL>
SQL> INSERT INTO t(text) VALUES ('REL');

1 row created.

SQL>
SQL> SELECT text, my_text FROM t;

TEXT  MY_TEXT
----- ------------------------------
REL   REL230420151000

SQL>

1000 から始まる ID 列を作成しました。必要に応じてカスタマイズできます。

VIRTUAL 列には小さなトリックが 1 つあります。固定サイズのvarchar2 として明示的にキャストする必要があります。そうしないと、暗黙的な変換によって最大サイズになります。詳細については、これを参照してください仮想列式で数値を連結すると、ORA-12899 がスローされます: 値が列に対して大きすぎます

于 2015-04-23T11:18:25.643 に答える
0

これをチェックすると、 seq を作成できない場合がありますが、以下のように select を使用できます。

シーケンス mysec minvalue 0 を作成 10001 で開始 nocache を 1 ずつ増やします。

デュアルから 'REL'||to_char(sysdate,'DDMMYYYY')||mysec.nextval を選択します。

于 2015-04-23T11:22:09.493 に答える