Da Sie DESCRIBE (...) erwähnen, müssen Sie SQL * Plus verwenden - oder ein grafisches Programm, das SQL * Plus-Befehle wie Toad oder SQL Developer versteht. Leider können Sie den DESCRIBE-Befehl NICHT in SQL oder in PL/SQL ausführen, da DESCRIBE ein SQL * Plus-Befehl ist, kein SQL- oder PL/SQL-Befehl.
Wenn Sie SQL Developer oder Toad verwenden, haben sie eine Funktion, mit der Sie eine Tabelle aufrufen und Ihnen die SQL (nicht PL/SQL - das ist nicht erforderlich, einfache und sehr schnelle SQL ist alles was benötigt wird) um die Tabellen neu zu erstellen, einschließlich Einschränkungen und Kommentare. Im Folgenden gebe ich die Ausgabe der Verwendung dieser Funktion in SQL Developer in einer SQL-Übungstabelle wieder. Dies erstellt nur die Tabellenstruktur, nicht ihre Daten; Sie werden noch die Daten über, zum Beispiel mit
INSERT INTO (new_table) (SELECT * FROM old_table)
Der Vorteil gegenüber Alexsej Lösung kopieren müssen, ist, dass der Datentyp genau kopiert werden; In der Lösung von Aleksej sind die Spalten nicht notwendigerweise GENAU identisch - [zB in der alten Tabelle können Sie eine VARCHAR2 (300) -Spalte haben; die Breite 300 wird nicht mit seiner Methode kopiert, stattdessen wird die Breite der tatsächlich in der Tabelle vorhandenen Daten verwendet.] Bearbeiten: Wie Alex Poole in einem Kommentar darauf hingewiesen hat, was ich hier gesagt habe (in eckige Klammern) ist FALSCH, Klonen einer Tabelle mit Aleksej-Lösung wird Spaltenbreiten und so beibehalten. (Auch seine Methode kopiert die Einschränkungen nicht, wie NOT NULL und UNIQUE.)
Die Methode, die ich empfehle, erstellt noch keine Trigger, aber es erstellt Constraints und Indizes neu.
Hier ist ein Beispiel dafür, was SQL Developer für Sie tun können, ohne viel Aufwand auf Ihrer Seite:
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)';
Viel Glück!
Übrigens, wenn Sie plain SQL \ * Plus und nicht eine der grafischen Schnittstellen verwenden, kann das gleiche mit ein wenig mehr Arbeit getan werden. Bitte rate auf die eine oder andere Weise. – mathguy
Ihr erster Kommentar zu CTAS ist falsch; Die Datentypen werden genau kopiert.Es scheint auch, dass es sich um eine PL/SQL-Übung handelt, sodass die Verwendung einer Client-Funktion nicht in Betracht kommt. (Obwohl die Frage das natürlich nicht erwähnt). –
Oh, OK, ich stehe korrigiert. Ich werde das in meiner Antwort erwähnen. Da es sich um eine PL/SQL-Übung handelt, haben Sie natürlich Recht; Ich interpretierte: "Kann ich das anders machen?" zu meinen, er/sie sucht nach irgendwelchen Mitteln, nicht unbedingt PL/SQL. In der Tat würde ich mich sehr freuen, wenn Forumsteilnehmer lernen würden, solche Werkzeuge (JEDE solche Werkzeuge) zu verwenden, so dass sie Anweisungen für ihre Testtabellen erstellen und einfügen können, die jedem das Leben viel leichter machen würden. Also, wenn meine (und andere) Antworten hier andere Menschen als die OP dazu ermutigen, das zu tun ... werde ich glücklich sein! Danke, mathguy-ro – mathguy