ich habe eine Tabelle in einer Oracle-DB mit fehlenden Einträgen.
Die Spalten, in denen Zellen "null" sind, hole ich mir zuvor. Jetzt möchte ich, dass für jede Spalte in der fehlende Zellen vorhanden sind
a) eine neue Spalte erzeugt wird
b) in dieser Spalte 1 oder 0 geschrieben wird, jenachdem ob der Datensatz vorhanden war oder nicht und
c) der Wert in der Zelle zufällig mit einem beliebigen Wert aus der Spalte befüllt wird
Ich habe in meiner Beispieltabelle 3 Spalten, in denen dies der Fall ist. Für 2 Spalten funktioniert die folgende Schleife perfekt. Für die letzte Spalte wird zwar eine neue Spalte hinzugefügt, aber weder mit 1/0 upgedated, noch der fehlende Wert in der Ursprungsspalte überschrieben.
Den SQL Befehl habe ich mir auch schon ausgeben lassen und im SQL-Developer ausgeführt, da funktioniert er. Er scheint einfach die Query nicht abzuschicken (die letzten beiden execute Statements für die letzte Spalte). Hat jemand eine Idee, woran das liegen könnte?
Code: Alles auswählen
for column in missing_columns:
columns=(tabelle,column)
missing= (tabelle,column,column)
replace = (tabelle,column,column,column,tabelle,column)
#neue Spalte hinzufügen mit_missing suffix
cur.execute("ALTER TABLE %s ADD %s_missing varchar(25)" % columns)
# 1 oder 0 eingeben wenn schon da gewsen
cur.execute("UPDATE %s SET %s_missing = CASE WHEN %s IS NULL THEN '1' ELSE '0' END" % missing )
# leere Zelle mit random Wert ersetzen
cur.execute("UPDATE %s SET %s = (SELECT %s FROM (SELECT %s FROM %s ORDER BY dbms_random.value ) WHERE rownum = 1) WHERE %s IS NULL" % replace)
cur.close()
db.close()