2009-08-31 27 views
1

Ich habe eine Situation, in der ich eine Oracle-Prozedur habe, die von mindestens 3 oder 4 verschiedenen Orten aufgerufen wird. Ich muss in der Lage sein, benutzerdefinierten Code in Abhängigkeit von einigen Daten aufzurufen. Der benutzerdefinierte Code ist kundenspezifisch - also könnte Kunde A A-B-C ausführen, wo Kunde B 6-7-8 ausführen möchte, und Kunde C muss nichts extra tun. Wenn Kunden D ... Z kommen, möchte ich meine bestehende Vorgehensweise nicht ändern müssen.Anrufdaten-spezifische gespeicherte Prozedur von Oracle-Prozedur

Ich möchte in der Lage sein, die kundenspezifische Prozedur in eine Tabelle einzugeben. Überprüfen Sie in dieser vorhandenen Prozedur diese Datenbanktabelle, wenn eine Prozedur mit benutzerdefiniertem Code vorhanden ist, und führen Sie sie gegebenenfalls aus. Jede der Kundencode-Prozeduren würde die gleichen Parameter haben.

Zum Beispiel:

  1. Meine Anwendung (3+ Plätze) nennt das „Löschen“ Prozedur
  2. In diesem Löschvorgang, den Namen eines Kindes-Prozedur aufzurufen nachschlagen (wenn man existiert alle)
  3. Wenn ein solches vorhanden ist, führen Sie diese löschen Prozedur (die Parameter in), die

ich weiß, ich kann dies tun mit dem Aufbau einer Zeichenfolge, die den Aufruf der gespeicherten Prozedur enthält. Aber ich würde gerne wissen, ob Oracle 10g etwas eingebaut hat, um so etwas zu tun?

Antwort

2

Die endgültige Lösung, mit der wir gingen, war, den Namen einer Prozedur in einer Datenbanktabelle zu speichern. Wir erstellen dann den SQL-Aufruf und verwenden eine EXECUTE-Anweisung.

2

Hat jeder Ihrer Kunden eine eigene Datenbank? Wenn ja, wäre die beste Option, conditional compilation zu verwenden. Dies hat den Vorteil, dass kein dynamisches SQL benötigt wird. Lassen Sie das Hauptprogramm immer die benutzerdefinierte Prozedur aufrufen, und verwenden Sie CC-Flags, um den darin enthaltenen Code zu variieren.

Ansonsten hat Oracle eine Rule Engine, aber es ist nicht wirklich für unsere Verwendung gedacht.

+0

Entschuldigung, ich wusste nicht, dass dies Antworten hatte - nein - es ist alles eine einzige Datenbank und ein einziger Satz gespeicherter Prozeduren. –

0

Stimmen Sie der Antwort von APC zu und erweitern Sie sie einfach, in this Whitepaper, wenn Sie nach "Komponentenbasierte Installation" suchen, beschreibt es ein ähnliches Problem, das durch bedingte Kompilierung gelöst wird.

0

Ihre Lösung scheint angesichts der Anforderungen angemessen, also habe ich sie gewählt.

Eine andere Option wäre, die Ergebnisse aus Ihrer Tabelle nachzuschlagen und Aufrufe an die Prozeduren innerhalb einer großen Fallanweisung zu senden. Es wäre mehr Code, aber es hätte den Vorteil, die Abhängigkeitskette sichtbar zu machen, so dass Sie fehlende Berechtigungen und ungültige Prozeduren leichter finden könnten.