Parametry typu IN, OUT, IN OUT w procedurach i funkcjach
Dla procedur oraz funkcji możemy definiować opcjonalne parametry. Mogą
występować w trzech typach:
IN – parametr tylko do odczytu, poprzez który dane zostają przekazane do
podprogramu.
OUT – Służy do zwracania wartości z podprogramu. Ma wartość NULL do
momentu kiedy zostanie zainicjalizowana.
IN OUT – Połączenie dwóch powyższych typów. Podczas wywoływania
programu tym parametrem przekazywane są do niego wartości, a po
zakończeniu wykonywania zwracane. Stosuje się go gdy dane wejściowe
mają zostać zmienione podczas działania programu.
Podczas deklarowania parametrów dla procedury lub funkcji nie ma
sztywnych ograniczeń co do ich ilości oraz kolejności. Parametry mogę
zadeklarować na kilka różnych sposobów i poniżej omawiam to na
przykładach:
wejsciowy1 – parametr wejścia typu varchar2, nie posiada wartości
domyślnej i dlatego przy wywoływaniu podprogramu będę zmuszony ją
podać.
wejsciowy2 oraz wejsciowy3 - dwa sposoby zadeklarowania wartości
domyślnej dla parametru. Jeśli nie przypiszę żadnej wartości, przypisana
zostanie automatycznie wartość występująca po DEFAULT lub znaku
przypisania. Podczas wywoływania podprogramu nie muszę podawać
wartości do tego parametru.
wejsciowy4 – ponieważ nie określiłem jaki ma to być typ parametru, Oracle
domyślnie przyjmuje że jest ot parametr typu IN.
wejsciowy5 – parametr typu wejściowego numerycznego który będę musiał
uzupełnić przy wywoływaniu procedury.
wyjsciowy – parametr wyjściowy typu number. Nie mogę określić dla niego
wartości domyślnej, ani wartości wejściowej przy wywołaniu programu. Mogę
to zrobić jedynie wewnątrz podprogramu.
dwustronny – parametr do którego nie mogę przypisać wartości domyślnej
przy wywoływaniu podprogramu. Mogę podać do niego wartość podczas
wywoływania podprogramu.
Mogę określać typ parametru, nie mogę natomiast długości. Zamiast więc
stosować varchar2(243) muszę zastosować samo varchar2.
Przykład wzajemnego wywoływania procedur oraz praktycznego
przekazywania parametrów.
1.Tworzę procedurę o nazwie „wypisywacz”, która po otrzymaniu
danych w parametrach wejściowych (imię i nazwisko są domyślnie IN)
ma wypisać na ekranie powitanie. Ponadto do parametru wyjściowego
wzrost ma przypisać wartość 178.
2. Z bloku anonimowego wywołuję przed momentem stworzoną procedurę
podając wartości dla parametrów wejściowych, oraz nazwę zmiennej do
której ma zostać przypisana wartość wyjściowa.
Jak widać, po wywołaniu procedury „wypisywacz” wartość zmiennej do której
została przypisana wartość wewnątrz procedury „wypisywacz” uległa zmianie.
Parametrów wcale nie muszę wypisywać w dokładnie takiej kolejności w
jakiej są zdeklarowane w definicji funkcji/procedury. Jedynym warunkiem jest
określenie podczas wywoływania podprogramu do jakiej zmiennej przypisuję
jaką wartość.