Procedury w PL/SQL

W wcześniejszych artykułach na temat baz danych Oracle skupiłam się na temacie transakcji. W tym natomiast przedstawię Ci w jaki sposób można napisać proste procedury w PL/SQL. Jeśli więc zastanawiasz się jak napisać procedury z wykorzystaniem PL/SQL oraz od czego zacząć? To świetnie – dzięki temu artykułowi dowiesz co  do tego jest niezbędne!

1.1 Co to jest procedura.

Procedurę można określić jako zestaw instrukcji SQL która jest przechowywana na po stronie serwera. To scentralizowanie logiki biznesowej w bazie danych. Przydają się one również do automatyzacji cyklicznie powtarzających się procesów np.do wykonania prac instalacyjnych.

1.2 Procedury – Zalety

Mogą być używane przez każdy program i system (Windows, Mac, Linux) mający dostęp do bazy danych. Mogą ona być użyte przez każdego klienta który posiada odpowiednie uprawnienia dla danej procedury.  Instrukcje są znormalizowane a więc zawsze otrzymamy taki sam wynik. Wszystkie procedury są przechowywane w jednym miejscu na serwerze. Dzięki temu klient może uruchomić procedurę która wykonana instrukcje SQL do których klient nie ma dostępu.

1.3 Procedury – Wady

Migracja z jednego dialektu bazy danych na inny np z PL/SQL na MySql to procedury zazwyczaj trzeba napisać od nowa. Składnia procedur w danym dialekcie zazwyczaj są znacząco różne.

2.1 Procedury w PL/SQL

Stworzenie procedury możemy porównać do szablonu artykułu gdzie mamy wstęp rozwinięcie i zakończenie.

Również i procedura posiada obowiązkowe części i składnie do jej prawidłowego napisania. Jeżeli piszemy procedurę w PL/SQL jej rozpoczęcie wymaga: SET SERVEROUTPUT ON. Ta instrukcja jest konieczna do odczytania w terminalu zawartości z Procedury DBMS_OUTPUT.PUT_LINE (). W przeciwnym razie zobaczymy tylko informacje typu „procedure complited”

Kolejna koniczna instrukcja to WHENEVER SQLERROR EXIT FAILURE – zawiera informacje jak system ma się zachować w przypadku błędu. Pełny zestaw możliwości dla WHENEVER SQLERROR można znaleźć w dokumentacji Oracle.

W następnej kolejności mamy: CREATE OR REPLACE PROCEDURE nazwa procedury. Co oznacza stwórz lub zamień istniejąca już procedurę.
Procedura może być bezparametrowa lub z jednym lub wieloma parametrami. Dla tych parametrów wyróżniamy 3 tryby: (IN, OUT, IN OUT)

  • IN jest to tryb domyślny i oznacza że parametr musi mieć wartość w czasie uruchomienia. Poza tym wartość tego parametru nie może być zmieniona w treści procedury.
  • OUT oznacza że parametr jest ustawiony w treści procedury. Może zostać zmieniony.
  • IN|OUT oznacza że parametr może może mieć wartość w momencie uruchomienia jak i może zostać zmieniony podczas wykonywania się procedury.

Całość może więc przybrać formę:

Przyklad procedury w PL/SQL

 

Przykładowa procedura w PL/SQL. Logika if służy tutaj tylko do pokazania że pomiędzy Begin a Exception znajduje się właściwe ciało procedury.

2.2 Obsługa wyjątków w PL/SQL

Tak jak i w metodach Javy czy w każdym innym języku programowania tak i tutaj należny pamiętać o obsłudze wyjątków. W instrukcji Prcedury wprowadzamy blok EXCEPTION w którym definiujemy co takiego ma się stać gdy dany wyjątek wystąpi. W przypadku przykładu powyżej wywołujemy exception „OTHERS” który potrafi obsłużyć każdy wyjątek w PL/SQL. Dlatego powinno umieszczać się go na końcu bloku EXCEPTION. Jednak temat wyjątków kryje w sobie dużo więcej tajemnic dlatego też pozwolę sobie przygotować na ten temat kolejny artykuł do którego już dziś zachęcam 🙂

3.0 Podsumowanie

Artykuł ten nie wyczerpuje całkowicie tematu Procedur  PL/SQL. Zbiera jednak najistotniejsze informacje do rozpoczęcia z nimi pracy.  Jeśli więc drogi czytelniku znajdujesz coś co chciałbyś/chciałabyś przeczytać na temat procedur w PL/SQL napisz w komentarzu ;). Chętnie napiszę 🙂

 
 

Zródła:

  1. Oracle Database 12c i SQL. Programowanie. J. Price.
  2. Strefakursów: Kurs SQL nowoczesne bazy danych.
  3. Własne spostrzeżenia na podstawie pracy w jednym z projektów.
  4. PL/SQL.png : https://www.oracle.com/pl/database/technologies/application-development.html

Leave a Comment

Twój adres e-mail nie zostanie opublikowany.