Frage

Ich habe einen Fortschritt Datenbank, die ich von einem ETL bin durchführen. Eine der Tabellen, die ich von gerade lese keinen eindeutigen Schlüssel auf sie haben, so muss ich die ROWID zugreifen zu können, die Zeile eindeutig identifizieren. Was ist die Syntax für die ROWID in Progress zugreifen?

Ich verstehe, gibt es Probleme mit ROWID für Zeile Identifizierung verwendet wird, aber es ist alles, was ich jetzt habe.

War es hilfreich?

Lösung

Eine schnelle Einschränkung für meine Antwort - es ist fast 10 Jahre her, seit ich gearbeitet Fortschritt so mein Wissen ist wahrscheinlich mehr als nur ein wenig veraltet.

Überprüfen der Fortschritt Sprachreferenz ROWID und RECID: ich erinnere mich noch da> [PDF] scheint die beiden Funktionen zu zeigen. Die ROWID Funktion ist neuer und ist bevorzugt.

In Progress 4GL Sie es so etwas wie diese verwenden würde:

FIND customer WHERE cust-num = 123.
crowid = ROWID(customer).

oder:

FIND customer WHERE ROWID(customer) = crowid EXCLUSIVE-LOCK.

Überprüfen der Fortschritt SQL Reference [PDF] zeigt ROWID ist auch in SQL als Fortschritt Erweiterung zur Verfügung. Sie würden es wie so verwenden:

SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123

Edit:. Herausgegeben folgende Stefans Feedback

Andere Tipps

Je nach Situation und das Verhalten der Anwendung dieser kann oder auch keine Rolle, aber Sie sollten sich bewusst sein, dass ROWIDs & RECIDs wiederverwendet werden, und dass sie sich ändern können.

1) Wenn ein Datensatz gelöscht wird, es ist ROWID wird schließlich wieder verwendet werden.

2) Wenn die Tabelle über einen Dump & Last oder einer tablemove zu einem neuen Speicherbereich neu organisiert wird dann die ROWIDs wird sich ändern.

Nur um ein wenig zu Dave Webb Antworten. Ich hatte ROWID in der select-Anweisung versucht, aber wurde ein Syntaxfehler gegeben. ROWID funktioniert nur, wenn Sie den Rest der Spalten angeben wählen, können Sie nicht * verwenden.

Das funktioniert nicht:

SELECT ROWID, * FROM customer WHERE cust-num = 123

Dies funktioniert:

SELECT ROWID, FirstName, LastName FROM customer WHERE cust-num = 123

Eine schnelle Google-Suche auftaucht dies: http://bytes.com/forum/thread174440.html

die Nachricht nach unten hin Lesen von greg@turnstep.com (Sie wollen entweder oid oder ctid je nachdem, was garantiert Ihnen wieder wollen Ausdauer und Einzigartigkeit)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top