Erstellen Sie die Tabelle Wie in PL/SQL?
Ich versuche eine Tabelle erstellen, die innerhalb von PL/SQL
wie kann ich das erreichen?
immer
Fehlermeldung:
ORA-00933: SQL-Befehl nicht korrekt beendet"
hier ist der code, ich habe Fehler mit
DECLARE
station_id_ms1 NUMBER :=10347;
realtime_start DATE :=to_date('2012-01-01 00:00:00','YYYY-DD-MM HH24:MI:SS');
realtime_end DATE :=to_date('2012-07-01 00:00:00','YYYY-DD-MM HH24:MI:SS');
BEGIN
EXECUTE IMMEDIATE ('
CREATE TABLE new_table_name
AS
SELECT
((realtime - to_date(''01-JAN-1970'',''DD-MON-YYYY'')) * (86400)) AS realtime_ms1,
magnetic_ms_id,
ADC_value_pp_2_mgntc_fld_amp(ch2_value,ch2_gain_value,magnetic_ms_id,2) AS B_x_ms1,
ADC_value_pp_2_mgntc_fld_amp(ch1_value,ch1_gain_value,magnetic_ms_id,1) AS B_y_ms1,
real_nanosecs2*4/3*360/20e6 AS phase_x_ms1,
real_nanosecs1*4/3*360/20e6 AS phase_y_ms1
FROM
raw_mag
WHERE
magnetic_ms_id = '||station_id_ms1||'
AND realtime > '||realtime_start||'
AND realtime < '||realtime_end||'
AND ch1_tune_value = 0
AND realtime < pkg_timezone.change_timezone(gettime,''CET'',''UTC'')
');
END;
warum
da kann man nicht ausführen von DDL-Anweisungen in PL/SQL ohne EXECUTE IMMEDIATE.
das nur stellt sich die Frage. Warum PL/SQL? Warum nicht einfach die Tabelle erstellen? Es gibt Szenarien, in denen es legitim ist, aber Sie sind gewaltig in der Unterzahl, die von den Fällen, in denen dieser Ansatz ist falsch oder einfach nur falsch.
Was meinst du? "create table" scheint nicht zu arbeiten unter PL/SQL! hast du ein Beispiel, dass zeigt, dass es funktioniert? .... Dank
was ich meine ist, Datenbank-schemas sollte stabil sein. Wir wouldf erwarten Sie Dinge wie Tische, um sich langsam zu ändern, und daher erstellt mit DDL-Skripts, vorzugsweise Skripte unter Kontrolle der Quellcodeverwaltung. Eine Anforderung zum erstellen von Tabellen in PL/SQL nicht passt, das Modell. Nun vielleicht gibt es ein echtes Bedürfnis, um Tabellen zu erstellen, die dynamisch in einem hintergrund-job ein. Aber mehr in der Regel, weil die Entwickler verkennt die Anforderung und/oder nicht wissen, wie Sie schreiben, eine richtige Oracle-Datenbank-Anwendung.
EXECUTE IMMEDIATE
? nur das erstellen der Tabelle.da kann man nicht ausführen von DDL-Anweisungen in PL/SQL ohne EXECUTE IMMEDIATE.
das nur stellt sich die Frage. Warum PL/SQL? Warum nicht einfach die Tabelle erstellen? Es gibt Szenarien, in denen es legitim ist, aber Sie sind gewaltig in der Unterzahl, die von den Fällen, in denen dieser Ansatz ist falsch oder einfach nur falsch.
Was meinst du? "create table" scheint nicht zu arbeiten unter PL/SQL! hast du ein Beispiel, dass zeigt, dass es funktioniert? .... Dank
was ich meine ist, Datenbank-schemas sollte stabil sein. Wir wouldf erwarten Sie Dinge wie Tische, um sich langsam zu ändern, und daher erstellt mit DDL-Skripts, vorzugsweise Skripte unter Kontrolle der Quellcodeverwaltung. Eine Anforderung zum erstellen von Tabellen in PL/SQL nicht passt, das Modell. Nun vielleicht gibt es ein echtes Bedürfnis, um Tabellen zu erstellen, die dynamisch in einem hintergrund-job ein. Aber mehr in der Regel, weil die Entwickler verkennt die Anforderung und/oder nicht wissen, wie Sie schreiben, eine richtige Oracle-Datenbank-Anwendung.
InformationsquelleAutor Data-Base | 2012-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie char-to-date Konvertierung innerhalb das plsql-Zeichenfolge, die Sie excecute sofort.
Dem Datum, an dem Sie deklariert wird sein "back-cast" zu einem varchar2 in der Verkettung und der "re-cast" in ein Datum wieder, das für die Ausführung des create table-Anweisung. Und "alles mögliche" passieren kann, in diesen zwei Würfe, so dass Sie wollen, stellen Sie sicher, dass Sie in Steuern, wie die Zeichen-string interpretiert wird, wenn der Zauber auf ein Datum.
InformationsquelleAutor René Nyffenegger
Ich würde verwenden, bindet für station_id_ms1, realtime_start, realtime_end:
Ja, bindet. dieser Wert aus Abfrage :station_id_ms1 ersetzt werden, natürlich mit geschriebenen Wert bei der VERWENDUNG IN station_id_ms1.
Ich habe diese ORA-01027: "bind-Variablen nicht zulässig für Daten-definition-Operationen"
fand dieses "Bind-Variablen dürfen in DML-Anweisungen (SELECT, UPDATE, DELETE) oder innerhalb von Programmen, aber nicht in DDLs (Data Definition Language statements)"
argh, in diesem Fall sollte man sich sorgfältig mit Datums-Variablen. In der Abfrage erscheinen soll, to_date(variable, format). Die Aussage ist ein text. Date-variable gesetzt wird, die als varchar2 (implicit cast)
InformationsquelleAutor Florin Ghita