INFORMATION_SCHEMA.ROUTINES zwraca metadane funkcji i procedur zgodnie ze standardem ANSI, niezależnie od implementacji.
Zakres informacji zwracanych przez INFORMATION_SCHEMA.ROUTINES
INFORMATION_SCHEMA.ROUTINES jest widokiem metadanych opisującym procedury składowane i funkcje dostępne w bazie danych. Nazwa ROUTINES odnosi się do obu rodzajów obiektów, ponieważ w terminologii SQL procedura i funkcja są traktowane jako rutyny. Wiersz widoku reprezentuje konkretną funkcję albo procedurę widoczną dla bieżącego użytkownika zgodnie z uprawnieniami oraz regułami implementacji danego systemu zarządzania bazą danych.
Widok należy do schematu INFORMATION_SCHEMA, którego celem jest udostępnianie metadanych w ujednoliconym modelu związanym ze standardem SQL. Dzięki temu zapytanie o podstawowe właściwości rutyn może być bardziej przenośne niż odwołanie do wewnętrznych katalogów systemowych konkretnego silnika. Nie oznacza to jednak pełnej zgodności między wszystkimi bazami danych. Poszczególne produkty mogą pomijać część kolumn, zwracać wartości uproszczone albo stosować własne ograniczenia widoczności.
Najważniejsze kolumny i identyfikacja obiektu
Do podstawowych kolumn widoku należą między innymi SPECIFIC_CATALOG, SPECIFIC_SCHEMA i SPECIFIC_NAME. Tworzą one identyfikację konkretnej rutyny, przy czym nazwa specyficzna może odróżniać obiekty, które w zwykłym zapisie mają podobną nazwę lub należą do różnych przeciążeń. Kolumny ROUTINE_CATALOG, ROUTINE_SCHEMA i ROUTINE_NAME opisują katalog, schemat i nazwę rutyny w jej zwykłej identyfikacji.
Kolumna ROUTINE_TYPE wskazuje, czy wiersz dotyczy procedury, czy funkcji. Dla funkcji istotne mogą być także informacje o typie zwracanej wartości, takie jak DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION i pokrewne kolumny opisujące charakterystykę typu. W zależności od silnika i rodzaju rutyny niektóre pola mogą przyjmować wartość NULL, ponieważ dana właściwość nie ma zastosowania albo nie jest prezentowana przez warstwę INFORMATION_SCHEMA.
W widoku można również spotkać kolumny opisujące język implementacji, sposób wywołania, deterministyczność, możliwość wykonywania instrukcji SQL oraz właściwości dostępu do danych. Ich znaczenie trzeba interpretować zgodnie z dokumentacją używanego systemu. Sama obecność kolumny w standardowym modelu nie gwarantuje, że konkretny silnik wypełni ją szczegółowo dla każdej procedury lub funkcji.
Zapytania kontrolne i interpretacja metadanych
Podstawowe wyszukiwanie rutyn można wykonać przez filtrowanie po schemacie i typie obiektu, na przykład: SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'public';. Takie zapytanie służy do utworzenia listy funkcji i procedur widocznych w określonym schemacie. Warto używać jawnego warunku dotyczącego schematu, ponieważ sama nazwa rutyny nie musi być unikatowa w całej bazie.
Do analizy parametrów nie wystarcza zwykle sam widok ROUTINES. Parametry wejściowe, wyjściowe i ich typy są zazwyczaj udostępniane w widoku INFORMATION_SCHEMA.PARAMETERS. Z kolei opis tekstu definicji może być przechowywany w innym widoku lub katalogu systemowym, zależnie od silnika. Rozdzielenie tych informacji jest celowe: ROUTINES opisuje rutynę jako obiekt, natomiast parametry i treść implementacji mają własne modele metadanych.
Przy porównywaniu środowisk należy brać pod uwagę uprawnienia użytkownika wykonującego zapytanie. Brak rutyny w wyniku nie musi oznaczać, że obiekt nie istnieje. Może on być niewidoczny dla danego konta, należeć do innego katalogu albo być pomijany przez konkretną implementację widoku. Z tego powodu inwentaryzację obiektów warto wykonywać tym samym kontem, zakresem katalogów i zestawem filtrów w każdym porównywanym środowisku.
Rola widoku w diagnostyce działania bazy danych
INFORMATION_SCHEMA.ROUTINES pomaga ustalić, czy wymagane funkcje i procedury są obecne, jak zostały nazwane oraz jaki typ rutyny powinien być wywoływany przez aplikację. Jest to przydatne przy analizie błędów wynikających z niepełnej migracji schematu, wywołania obiektu z niewłaściwego schematu albo rozbieżności między wersją aplikacji a strukturą bazy danych. Sam widok nie wykonuje rutyn i nie sprawdza poprawności ich logiki biznesowej; dostarcza jedynie opis metadanych.
W praktycznej diagnostyce trzeba zestawić wynik widoku z rzeczywistym zapytaniem aplikacji, listą parametrów, uprawnieniami oraz dokumentacją konkretnego silnika. Szczególnej ostrożności wymaga interpretacja nazw przeciążonych funkcji, typów zwracanych i wartości oznaczonych jako NULL. Jeżeli potrzebne są informacje specyficzne dla producenta, takie jak plan wykonania, zależności obiektu, pełna definicja lub szczegółowe właściwości bezpieczeństwa, należy użyć przeznaczonego do tego katalogu systemowego zgodnego z danym silnikiem. Funkcje INFORMATION_SCHEMA.ROUTINES ograniczają się do ustandaryzowanego opisu i nie zastępują kompletnego narzędzia administracyjnego.