składnia

opis

tworzy procedurę składowaną. Domyślnie jest powiązana z domyślną bazą danych. Aby powiązać routineexplicite z podaną bazą danych, podaj nazwę jako db_name.sp_namew gdy go tworzysz.

Po wywołaniu procedury wykonywane jest niejawne użycie db_name (i po zakończeniu procedury). Powoduje, że rutyna ma podaną domyślną bazę danych podczas wykonywania. Polecenia USE withinstored są niedozwolone.,

Po utworzeniu procedury składowanej, wywołujesz ją za pomocą poleceniaCALL (zobacz wywołanie).

aby wykonać polecenieCREATE PROCEDURE, konieczne jest posiadanie przywilejuCREATE ROUTINE. Domyślnie Mariadbautomatycznie przyznaje uprawnieniaALTER ROUTINE IEXECUTE twórcy programu. Patrz także zapisywane uprawnienia rutynowe.,

DEFINER I klauzule bezpieczeństwa SQL określają kontekst bezpieczeństwa używany podczas sprawdzania uprawnień dostępu w rutynowym czasie wykonywania, jak opisano później. Wymaga SUPER privilege, lub, od MariaDB 10.5.2, ustawione uprawnienia użytkownika.

Jeśli nazwa procedury jest taka sama jak nazwa wbudowanej funkcji SQL, musisz użyć spacji między nazwą a następnąparenthesis podczas definiowania procedury, lub wystąpi błąd składni. Jest to również prawdą, gdy powołujesz się na rutynę później., Z tego powodu należy unikać ponownego używania nazw istniejących funkcji SQL dla własnych procedur przechowywanych.

tryb SQL IGNORE_SPACE ma zastosowanie do wbudowanych funkcji, a nie do storedroutines. Zawsze dozwolone jest posiadanie spacji po nazwie procedury, niezależnie od tego, czy IGNORE_SPACE jest włączone.

Lista parametrów zawarta w nawiasach musi być zawsze obecna.Jeśli nie ma żadnych parametrów, należy użyć pustej listy parametrów (). Nazwy parametrów nie uwzględniają wielkości liter.,

każdy parametr może być zadeklarowany jako dowolny prawidłowy typ danych, z tym wyjątkiem, że atrybut COLLATE nie może być użyty.

aby używać ważnych identyfikatorów jako nazw procedur, zobacz nazwy identyfikatorów.

IN/OUT/INOUT

każdy parametr jest domyślnie parametremIN. Aby określić inny parametr fora, użyj słowa kluczowego OUT lub INOUT przed nazwą parametru.

anIN parametr przekazuje wartość do procedury., Procedura może zmodyfikować wartość, ale modyfikacja nie jest widoczna dla wywołującego w momencie powrotu procedury. ParametrOUT przekazuje wartość z procesu z powrotem do wywołującego. Jego wartość początkowa jest NULL wewnątrz procedury, a jej wartość jest widoczna dla wywołującego, gdy procedura się kończy. Parametr INOUT jest inicjowany przez wywołującego, może być modyfikowany przez procedurę, a każda zmiana dokonana przez procedurę jest widoczna dla wywołującego po powrocie procedury.,

dla każdego parametru OUTlub INOUTprzekazujemy zmienną zdefiniowaną przez użytkownika w instrukcjiCALL, która wywołuje procedurę, dzięki czemu można uzyskać jej wartość po powrocie procedury. Jeśli wywołujesz procedurefrom w ramach innej procedury składowanej lub funkcji, możesz również przekazać parametr aroutine lub lokalną zmienną rutynową jako parametr IN lub INOUT.

deterministyczne/nie deterministyczne

DETERMINISTIC INOT DETERMINISTIC dotyczą tylko funkcji., Podanie DETERMINISTC lub NON-DETERMINISTIC w procedurach nie ma wpływu. Wartość domyślna to NOT DETERMINISTIC. Funkcje są DETERMINISTIC, gdy zawsze zwracają tę samą wartość dla tego samego wejścia. Na przykład funkcja truncate lub substring. Każda funkcja zawierająca dane jest więc zawsze NOT DETERMINISTIC.,

zawiera SQL/brak SQL/odczytuje dane SQL/modyfikuje dane SQL

CONTAINS SQL, NO SQL, READS SQL DATA I MODIFIES SQL DATA mają charakter informacyjny klauzule informujące serwer o tym, co robi funkcja. MariaDB w żaden sposób nie sprawdza, czy podana klauzula jest poprawna. Jeśli żadna z tych klauzul nie jest określona, domyślnie używana jest CONTAINS SQL.

MODIFIES SQL DATA oznacza, że funkcja zawiera polecenia, które mogą modyfikować dane przechowywane w bazach danych., Dzieje się tak, jeśli funkcja zawiera polecenia takie jak DELETE, UPDATE, INSERT, REPLACE lub DDL.

READS SQL DATA oznacza, że funkcja odczytuje dane przechowywane w bazach danych, ale nie modyfikuje żadnych danych. Dzieje się tak, jeśli używane są polecenia SELECT, ale nie są wykonywane żadne operacje zapisu.

CONTAINS SQL oznacza, że funkcja zawiera co najmniej jedno polecenie SQL, ale nie odczytuje ani nie zapisuje żadnych danych przechowywanych w bazie danych. Przykłady obejmują SET lub DO.,

NO SQL nic nie znaczy, ponieważ MariaDB nie obsługuje obecnie żadnego języka innego niż SQL.

routine_body składa się z poprawnej instrukcji procedury SQL. Może to być proste polecenie, takie jak SELECT lub INSERT, lub może to być polecenie compound napisane za pomocą BEGIN I END. Złożone deklaracje mogą zawierać deklaracje, pętle i inne struktury kontrolne. Szczegóły składni można znaleźć w instrukcji Programmatic i Compound.

MariaDB umożliwia procedury zawierające polecenia DDL, takie jakCREATE I, MariaDB pozwala również procedurom przechowywanym (ale nie przechowywanym funkcjom)zawierać polecenia transakcji SQL, takie jak COMMIT.

aby uzyskać dodatkowe informacje na temat poleceń, które nie są dozwolone w instalowanych procedurach, zobacz Ograniczenia procedur przechowywanych.

wywoływanie procedur składowanych z poziomu programów

informacje na temat wywoływania procedur składowanych z poziomu programów napisanych w języku z interfejsem MariaDB / MySQL znajdują się na stronie wywołanie.

lub zastąp

MariaDB począwszy od 10.1.,3

jeśli używana jest opcjonalna klauzulaOR REPLACE, działa ona jako skrót do:

DROP PROCEDURE IF EXISTS name;CREATE PROCEDURE name ...;

z tym wyjątkiem, że wszelkie istniejące uprawnienia procedury nie zostaną utracone.

Sql_mode

MariaDB przechowuje ustawienie zmiennej systemowej sql_mode, które obowiązuje w momencie tworzenia procedury i zawsze wykonuje procedurę z tym ustawieniem, niezależnie od trybu serwera SQL, który obowiązuje podczas wywoływania procedury.

zestawy znaków i zestawienia

parametry procedury mogą być zadeklarowane za pomocą dowolnego zestawu znaków / zestawienia., Jeśli zestaw znaków i kolacja nie są specjalnie ustawione, używane będą domyślne wartości bazy danych w momencie tworzenia. Jeśli domyślna wartość bazy danych zmieni się na późniejszym etapie, zestaw/zestawienie znaków procedury składowanej nie będzie zmieniane w tym samym czasie; procedura składowana musi zostać odrzucona i odtworzona, aby zapewnić ten sam zestaw/zestawienie znaków, co baza danych.

tryb Oracle

MariaDB począwszy od wersji 10.3

oprócz tradycyjnej składni MariaDB opartej na SQL/PSM, wspierany jest podzbiór języka PL / SQL Oracle., Zobacz Oracle mode z MariaDB 10.3 aby uzyskać szczegółowe informacje na temat zmian podczas uruchamiania Oracle mode.

przykłady

poniższy przykład pokazuje prostą procedurę składowaną, która używa parametru OUT. Używa polecenia DELIMITER do Ustawienia nowego delimitera na czas trwania procesu-patrz Delimitery w kliencie mysql.,

zestaw i zestawienie znaków:

Utwórz lub zastąp:

patrz również

  • nazwy identyfikatorów
  • przegląd procedur składowanych
  • zmiana procedury
  • upuść procedurę
  • Pokaż Utwórz procedurę
  • Pokaż status procedury
  • przywileje procedur składowanych
  • tabela schematów informacyjnych

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *