DDL-Anweisungen in PL/SQL?
Ich versuche den folgenden code zum erstellen einer Tabelle in PL/SQL:
DECLARE
V_NAME VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE TEMP(NAME VARCHAR(20))';
EXECUTE IMMEDIATE 'INSERT INTO TEMP VALUES(''XYZ'')';
SELECT NAME INTO V_NAME FROM TEMP;
END;
/
Den SELECT
- Anweisung schlägt fehl mit dieser Fehlermeldung:
PL/SQL: ORA-00942: table or view does not exist
Ist es möglich CREATE, INSERT and SELECT
alle in einer einzigen PL/SQL-Block eine nach der anderen?
warum Sie mit dynamischen sql? es mehr langsamer und gefährlich. und einfügen funktioniert?
Das ist eine schlechte Idee. Es ist ein gemeinsames Konstrukt, in einigen anderen Geschmacksrichtungen von RDBMS wie SQL Server, aber Oracle bietet bessere Ansätze. Für mehr Einblick Lesen Sie diese alte Antwort von mir: stackoverflow.com/a/1193443/146325
Das ist eine schlechte Idee. Es ist ein gemeinsames Konstrukt, in einigen anderen Geschmacksrichtungen von RDBMS wie SQL Server, aber Oracle bietet bessere Ansätze. Für mehr Einblick Lesen Sie diese alte Antwort von mir: stackoverflow.com/a/1193443/146325
InformationsquelleAutor Aspirant | 2012-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie tun etwas, wie die folgenden:
Zur compile-Zeit die Tabelle
TEMP
, nicht vorhanden. Es noch nicht erstellt wurden. Da es nicht vorhanden ist, können Sie nicht wählen Sie es aus; Sie muss deshalb auch zu tun, WÄHLEN Sie dynamisch. Es ist nicht jede müssen WÄHLEN Sie in diesem insbesondere situation, wenn Sie mit demRückkehr in
syntax.Jedoch, dass dynamisch Tabellen erstellen, ist normalerweise ein Indiz für ein schlecht konzipiertes schema. Es sollte nicht wirklich notwendig sein.
Kann ich nur empfehlen, René Nyffenegger ist post "Warum ist dynamische SQL-schlecht?" für die Gründe, warum Sie sollten vermeiden Sie dynamische SQL, wenn überhaupt möglich, vom performance-Standpunkt aus. Bitte beachten Sie auch, dass Sie viel mehr offen für SQL-injection und verwenden Sie bind-Variablen und
DBMS_ASSERT
zu schützen gegen Sie.mein Vorschlag macht die Tabelle erstellen, legen Sie sich hinein und wählen Sie die Werte aus...
InformationsquelleAutor Ben
Wenn Sie führen Sie das Programm mehrmals, erhalten Sie eine Fehlermeldung, auch nach dem ändern des Programms zum ausführen der select-Anweisung als dynamische SQL-oder mit einer Rückkehr in die Klausel.
Weil wenn Sie das Programm ausführen ersten mal wird es die Tabelle erstellen, ohne jedes Problem, aber wenn du es das nächste mal wie die Tabelle bereits erstellt, zum ersten mal und Sie nicht über eine drop-Anweisung wird dazu führen, dass eine Fehlermeldung: "die Tabelle existiert bereits in der Datenbank".
Also mein Vorschlag ist vor dem erstellen einer Tabelle in einer pl/sql-Programm immer überprüfen, ob es eine Tabelle mit dem gleichen Namen bereits in der Datenbank existiert oder nicht. Sie können dies überprüfen, mithilfe von Data dictionary views /system-Tabellen, die für die Speicherung der Metadaten je nach Datenbank-Typ.
Beispielsweise in Oracle können Sie folgende Ansichten, zu entscheiden, ob eine Tabellen erstellt werden muss oder nicht:
DBA_TABLES ,
ALL_TABLES,
USER_TABLES
InformationsquelleAutor Gourabp