DESCRIBE(...)に言及しているので、SQL * PlusまたはToadやSQL DeveloperなどのSQL * Plusコマンドを理解するグラフィカル・プログラムを使用している必要があります。残念ながら、DESCRIBEはSQL * Plusコマンドであり、SQLまたはPL/SQLコマンドではないため、SQLまたはPL/SQLでDESCRIBEコマンドを実行することはできません。
SQL DeveloperまたはToadを使用している場合は、テーブルを呼び出す機能があり、SQLを提供します(PL/SQLではなく、必要ありません。単純で非常に高速なSQLが必要です)制約とコメントを含めてテーブルを再作成します。以下では、SQL Developerでこの機能を使用した結果を、実際のSQLテーブルで再現します。これは、データではなくテーブル構造を作成するだけです。
INSERT INTO (new_table) (SELECT * FROM old_table)
などのデータをコピーする必要があります。Alexsejのソリューションを上回る利点は、データ型が正確にコピーされることです。 Aleksejのソリューションでは、列は必ずしも完全に同じではありません - [たとえば、古い表ではVARCHAR2(300)列があります。 ] :Alex Pooleがコメントで指摘したように、私がここで言ったように(in大括弧)は不正です.Aleksejのソリューションを使用してテーブルをクローンすると、カラムの幅などが保持されます。(彼の方法では、NOT NULLやUNIQUEのような制約はコピーされません)
推奨する方法では、トリガーは再作成されませんが、制約とインデックスが再作成されます。
CREATE TABLE "INTRO"."COURSES"
( "CODE" VARCHAR2(6 BYTE) NOT NULL ENABLE,
"DESCRIPTION" VARCHAR2(30 BYTE) NOT NULL ENABLE,
"CATEGORY" CHAR(3 BYTE) NOT NULL ENABLE,
"DURATION" NUMBER(2,0) NOT NULL ENABLE,
CONSTRAINT "COURSES_PK" PRIMARY KEY ("CODE")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ENABLE,
CONSTRAINT "COURSES_CAT_CHK" CHECK (CATEGORY in ('GEN','BLD','DSG')) ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SYSTEM" ;
COMMENT ON COLUMN "INTRO"."COURSES"."CODE" IS 'Unique course code';
COMMENT ON COLUMN "INTRO"."COURSES"."DESCRIPTION" IS 'Course description (title)';
COMMENT ON COLUMN "INTRO"."COURSES"."CATEGORY" IS 'Course category (GEN, BLD or DSG)';
COMMENT ON COLUMN "INTRO"."COURSES"."DURATION" IS 'Course duration (in days)';
幸運:ここ
は、SQL Developerはあなたの部分の努力で、あなたのために何ができるかの一例です!
ちなみに、単純なSQL \ * Plusを使用していて、グラフィカルインターフェイスではない場合、もう少し作業をしても同じことができます。どちらか一方に助言してください。 – mathguy
CTASに関する最初のコメントは間違っています。データ型は正確にコピーされます。また、これはPL/SQLのようなものなので、クライアント機能の使用は範囲外である可能性があります。 (もちろん質問には言及していませんが)。 –
ああ、わかりました。私は私の答えでそれを言及するでしょう。これがPL/SQLエクササイズであることについては、もちろん正しいかもしれません。私は「私はそれをやることができる別の方法はありますか」と解釈しました。彼/彼女は必ずしもPL/SQLではない、あらゆる手段を探していることを意味します。実際、フォーラムの参加者がそのようなツール(どのようなツールも)を使用する方法を学ぶならば、私は非常に満足しています。誰もが簡単にテストテーブルを作成して挿入することができます。だからもし私の(そして他の人たちの)答えがOP以外の人たちにこれをするよう奨励したら...私は幸せになるでしょう!おかげで、mathguy-ro – mathguy