Ich habe eine SQL-Basisabfrage, die ich hoffe, in einen dynamischen Cursor zu verwandeln.Oracle - Schleife durch eine Liste von Spalten
Ich habe eine Liste von Spalten, die ich überprüft werde, um zu sehen, ob die Werte seit der letzten Lauf geändert haben, Spalten, die ich überprüft habe umfassen: Einkommen, Herkunft, usw.
Der Ausgang des vor-and- nach Werten müssen in einer temp oder permanenten Tabelle für weitere Untersuchung gespeichert werden - wie Quelle der Wertänderung usw. ...
Da die Liste der Spalten mehr als 600+ ist, glaube ich nicht, dass ich will um die Basis SQL 600 mal zu kompilieren ..
Gibt es eine bessere Möglichkeit, einen dynamischen SQL-Cursor zu schreiben, um diese Aufgabe zu erfüllen?
Danke!
--- Basis SQL
SELECT a.*,
'Last_name' AS "field_name",
b.LAST_name AS last_name_updated
from
(SELECT person_id, last_name
FROM person
WHERE batch_id = (select max(batch_id) from person)
) a
FULL OUTER JOIN
(SELECT person_id, last_name
FROM person
WHERE batch_id = (select max(batch_id) - 1 from person)
) b
ON a.person_id = b.person_id
WHERE nvl(a.last_name,0) <> nvl(b.last_nm,0)
UNION
SELECT a.*,
'Income',
b.income AS income_updated
from
(SELECT person_id, income
FROM person
WHERE batch_id = (select max(batch_id) from person)
) a
FULL OUTER JOIN
(SELECT person_id, income
FROM person
WHERE batch_id = (select max(batch_id) - 1 from person)
) b
ON a.person_id = b.person_id
WHERE nvl(a.income,0) <> nvl(b.income,0)
--- gewünschter Ausgang
person_id || field_name || previous_value || updated_value
8783 || income || 95000 || 98000
235731 || last_name || Dawson || Dawson Jr.
Dank @Tony Andrews! Es sieht viel effizienter aus. Der einzige Fehler, den ich bekomme, ist "FROM Schlüsselwort nicht gefunden .... bei Zeile 44" .... Ich überprüfe, um zu sehen, was ich mit dem Code tun muss .. Nochmals vielen Dank! – LycorisRadiata