W MariaDB Server 10.3 dodaliśmy nowy tryb SQL (SQL_MODE=ORACLE), aby zapewnić zgodność z podzbiorem Oracle PL/SQL, proceduralnym rozszerzeniem języka zapytań strukturalnych (SQL). Wraz z najnowszą wersją MariaDB Community Server 10.6 kontynuujemy naszą podróż do rozszerzenia zgodności MariaDB z PL/SQL, dodając kilka funkcji, takich jak ROWNUM()
, ADD_MONTHS()
i TO_CHAR()
. Jest to fajne z wielu powodów, ale na początek MariaDB pozostaje jedyną bazą danych, w której zaimplementowano kompatybilność z Oracle Open Source, więc ta funkcja jest dostępna dla wszystkich. Aby naprawdę zrozumieć, co to oznacza, ważne jest, abyśmy zrobili mały krok wstecz, abyś wiedział, dlaczego zaczęliśmy podążać tą ścieżką.
Moc programowania proceduralnego i deklaratywnego
Łącząc moc manipulacji danymi języka SQL z możliwościami proceduralnymi, programiści mają mnóstwo ekscytujących, nowych możliwości. Korzystając z PL/SQL, programiści mają możliwość wykonywania instrukcji SQL, które koncentrują się na deklaratywnym podejściu „co robić”, a jednocześnie mają możliwość kontrolowania przepływu operacji lub „jak to zrobić”.
Czekaj, co? OK, rozważ następujące tradycyjne Instrukcja SQL.
SELECT id, name, has_kids FROM friends;
Prosty, elegancki i efektowny. SQL to piękny język, ale ma swoje ograniczenia. Na przykład, co by było, gdybyś chciał przejrzeć wyniki zwrócone przez SELECT
wykonanie wyciągu? A następnie, analizując wyniki, sprawdź każdy wynik za pomocą instrukcji warunkowej (np. jeśli has_kids
to prawda), abyś mógł wykonywać określone operacje w oparciu o te warunki?
Szybka notatka :To jest czysto hipotetyczne. Jestem pewien, że jeśli masz przyjaciół z dziećmi i przyjaciół bez dzieci, traktujesz ich tak samo. Ale ze względu na ten przykład załóżmy, że nie. OK? OK, super.
Ale przy tych wszystkich iteracjach i warunkach, możliwe jest, że natkniesz się na błąd. Czy nie byłoby miło, gdybyś mógł obsługiwać błędy (tj. wyjątki) bezpośrednio po stronie bazy danych, bez konieczności zwracania oryginalnych wyników z powrotem do kodu aplikacji do przetworzenia? Cóż, to po prostu szkoda, ponieważ używasz zwykłego starego SQL i żadna z tych rzeczy nie jest możliwa.
Nie bój się! Zamiast tego chodź ze mną do wspaniałego świata PL/SQL!
Poprzez użycie czegoś znanego jako blok PL/SQL, możesz połączyć SQL, który znasz i kochasz z możliwościami proceduralnymi, które pozwolą Ci kontrolować przepływ operacji za pomocą funkcji takich jak możliwość deklarowania zmiennych, obsługi warunków, pętli poprzez dane, zarządzaj wyjątkami i nie tylko.
Bloki PL/SQL są obsługiwane w MariaDB Server, gdzie instrukcje SQL i proceduralne są odpowiednio analizowane i wykonywane.
Całkiem fajnie, prawda? Jest o wiele lepiej! Wróćmy jednak do naszego poprzedniego przykładu. Możesz użyć pojedynczego bloku PL/SQL, aby wykonać wszystko, co wskazałem wcześniej.
Na przykład:
DELCARE CURSOR c IS SELECT id, name, has_kids FROM friends; BEGIN FOR friend_row IN c LOOP IF friend_row.has_kids == true THEN /* Do something */ ELSE /* Do something else */ END IF; END LOOP; EXCEPTION WHEN no_data_found THEN /* Handle no data found */ WHEN others THEN /* Handle all other kinds of exceptions */ END;
Więcej informacji
Potężne rzeczy, prawda? Cóż, ten wpis na blogu to tak naprawdę tylko wierzchołek góry lodowej. Coś na zaostrzenie apetytu, jeśli wolisz. Ale jeśli chcesz dowiedzieć się więcej, gorąco polecam obejrzenie seminarium internetowego, które niedawno zaprezentowaliśmy, MariaDB i PL/SQL:Połączenie potęgi SQL i instrukcji proceduralnych. W nim zagłębiamy się znacznie bardziej szczegółowo w to, dlaczego uczyniliśmy naszą misją dodawanie i rozszerzanie obsługi PL/SQL. Zamieszczamy w nim różne przykłady oraz demonstrację kodowania na żywo, dzięki której z pierwszej ręki zobaczysz, w jaki sposób możesz używać PL/SQL w MariaDB! Miłego kodowania, przyjaciele!