Frage

Angenommen ich einige Datentypen in PL / SQL definiert haben:

TYPE foo_t IS RECORD (...);
TYPE foo_table_t IS TABLE OF foo_t INDEX BY BINARY_INTEGER;

TYPE bar_t IS RECORD (...);
TYPE bar_table_t IS TABLE OF bar_t INDEX BY BINARY_INTEGER;

Ist es möglich für mich, ein Verfahren zu schreiben aus der Tabelle abgeleitet jeden Datentyp der Lage zu akzeptieren (zum Beispiel entweder ein foo_table_t oder ein bar_table_t) als Parameter? Das Verfahren benötigt keine Kenntnisse über die Zeilentypen der Tabelle. Ein einfaches Beispiel:

PROCEDURE remove_last(some_table ...) IS
BEGIN
    some_table.DELETE(some_table.LAST);
END;
War es hilfreich?

Lösung

Nicht direkt. Aus der PL / SQL-Programmierhandbuch:

„Die eigentlichen Parameter und die entsprechenden formalen Parameter müssen kompatible Datentypen haben.“

PL / SQL hat eine implizite Konvertierung von tatsächlichen Parameterdatentypen in formalen Parameter-Datentypen. So könnten Sie einen Zahlenwert an eine Prozedur übergeben, die einen String will, und es würde funktionieren, weil Sie eine implizite Konvertierung tun können.

Das Beste, was Sie tun könnten, wäre, zu überladenen Prozeduren schreiben:

VERFAHREN generic (foo IN OUT foo_t);

VERFAHREN generic (bar IN OUT bar_t);

Dann können Sie entweder mit Satzart generic nennen. Dieser verliert Attraktivität im Verhältnis zu der Anzahl der Datensatztypen :-D zu behandeln

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