Einerseits kann man zwischen Referenz- und Wertparameter wählen, anderseits kann man als Zugriff "ändernd" und "nichtändernd" wählen. Ändernd bezieht sich dabei auf den Aktualparameter, als das was man beim Aufruf angibt. Eine Unschönheit ist, dass USING nicht unbedingt das bedeuted was man erwartet. Wählt man einen USING Referenzparameter (also ohne VALUE), so passiert genau daselbe wie bei CHANGING. Ändert man den Formalparameter so ändert sich auch sofort der Aktualparameter (man ändert also, ohne das man "ändernd" also CHANGING angeben hat). Wählt man also einen USING-Referenzparameter, so sollte man den Formalparameter innerhalb der Routine nicht ändern. Ansonsten greift man lieber zu einem USING VALUE. Man arbeit dann quasi auf einer lokalen Kopie. Der wesentliche Unterschied zwischen VALUE oder nicht VALUE besteht darin, dass bei VALUE kopiert wird. Dies kann bei großen Datenvolumina tuer sein. Zudem kann man keine generischen Typen für Value-Parameter angeben. Will man ändern, so empfehlen sich in der Regel CHANGING-Referenzparameter. Der Unterschied zu CHANGING VALUE ist, dass die Änderungen sofort aktiv werden. Bei VALUE werden die Änderungen erst nach ordungsgemäßem Verlassen der Routine wirksam (also nicht bei vorzeitigem Abbruch).
Abschließend kann man eigentlich sagen:
- Will man ändern, so sollte man CHANGING verwenden.
- Will man nicht ändern, hat keine "großen" Datenvolumina und benötigt keine generische Parametertypen, so sollte man USING VALUE verwenden.
- ansonsten sollte man USING verwenden und den Formalparameter nicht ändern.
- CHANGING VALUE sollte man eigentlich vermeiden