mit der Länge null-Spalten sind nicht erlaubt - das Erstellen einer Tabelle aus der Ansicht
Entwarf ich einen Prozess zum kopieren von Daten von Blick in die entsprechenden Tabellen in oracle. Alles was ich tun muss ist Aufruf einer Prozedur übergeben 'view name' als parameter, und das schafft entsprechende Tabelle (wenn nicht vorhanden ist, sonst löschen und die Tabelle erstellt). Damit dies geschieht dynamisch und ich habe rund 50 Ansichten, und Sie sind geplant als oracle-jobs.
Nun habe ich ein Problem mit ein paar Tischen andernfalls mit folgende Fehlermeldung an manchen Tagen...
ORA-01723: Länge null-Spalten sind nicht erlaubt
Ich bin mir bewusst, der Grund für dieses ist, ein paar Spalten in der Ansicht als null, aber nicht an allen Tagen. Ja, ich sollte mit einer BESETZUNG für diese Spalten, aber wie ich bereits erwähnt, dies geschieht dynamisch, ich habe keine vorgefertigte Idee, die diese Spalten sind oder welche Ansicht ist das? Keine führt zu identifizieren, wenn es "null-Länge" Spalten " in den Blick, bevor ich die Tabelle erstellen, so dass ich denke, der kann die Lösung sein. Besser Abhilfe für diese ist wirklich zu schätzen.
Hinweis:
- CREATE TABLE TABLE_NAME AS SELECT * FROM VIEW_NAME --> Das ist meine Tabelle, Erstellung von SQL.
- Der Grund, warum ich wählen, dies ist die 'INSERT INTO' kann mehr Zeit und Ressourcen durch Protokollierung und Sperrung.
Dank,
Naga'
Sind die Ansichten einfach nur gefiltert wählt aus einer einzelnen Tabelle oder wenden Sie Funktionen, um die Werte?
InformationsquelleAutor Naga | 2013-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie sagte, Sie rufen eine Prozedur auf eine Tabelle erstellen aus der Ansicht. Also gehe ich davon aus, dass Sie bereits mit dynamic SQL (Native Dynamic SQL aka
EXECUTE IMMEDIATE
Anweisung oderDBMS_SQL
- Paket) zum ausführen von DDL-Anweisungen. Dann könnte man generieren komplizierterCREATE TABLE AS
- Anweisung, mit mit dem Oracle-dictionary-Ansichten wie USER_VIEWS und USER_TAB_COLUMNS, um Informationen über die Spalten " Arten, Länge, Maßstab und was du sonst noch brauchst um zu schreiben, eine richtige BESETZUNG nennen.Einem schmutzigen Beispiel ist unten:
Ergebnisse:
Glück.
timestamp
und zu reproduzieren, geben Sie den Namen an jedem anderen Fall.Super danke. Ich habe versucht, so etwas wie dieses und es funktionierte... create view dummy_view als select 1 as id , null als dept_no , 'naga' as name from dual; create table dummy_table wie select * from dummy_view UNION ALL Select cast(null as number) , cast(null as varchar2(10)), cast(null as varchar2(10)) from dual where 1=2
Natürlich muss der code erweitert werden, es ist nur ein Beispiel, um zu zeigen, die Idee.
InformationsquelleAutor suPPLer
Ich denke, Sie haben Ihre Methode zu löschen und Neuerstellen der Tabellen jedes mal auf einen falschen glauben. Abgeschnitten und mit einem direkten Pfad einfügen, wahlweise mit nologging, würde Ihnen praktisch das gleiche Ergebnis, ohne dieses problem. Wenn Sie:
... dann bist du voll Protokollierung der Betrieb sowieso.
InformationsquelleAutor David Aldridge