Apache Derby: polecenie CREATE FUNCTION
Tworzy funkcję SQL.
Właściciel funkcji i właściciel bazy danych automatycznie uzyskują przywilej EXECUTE dla funkcji i mają możliwość wydawania pozwoleń dla innych użytkowników. W stosunku do właściciela funkcji i właścicieli bazy nie działa polecenie REVOKE.
Składnia polecenia
CREATE FUNCTION nazwa_funkcji ( [ ParametrFunkcji [, ParametrFunkcji]* [...] ] ) RETURNS ZwracanyTypDanych [ ElementFunkcji ]*
Elementy obowiązkowe
Elementy mogą występować w jakiejkolwiek kolejności. Każdy typ elementu może się pojawiać tylko raz. Definicja funkcji musi zawierać następujące elementy:
- LANGUAGE
- PARAMETER STYLE
- EXTERNAL NAME
Objaśnienia
- nazwa_funkcji. Nazwa może być poprzedzona nazwą schematu. Jeżeli schemat nie jest podany, użyty jest schemat domyślny. Jeżeli podana jest nazwa procedury nie może to być procedura systemowa, której nazwa zaczyna się od SYS
- ParametrFunkcji. Musi być podany w postaci:
- [nazwa_parametru] TypDanych. 'TypDanych’ to typ danych Derby. Nie może być BLOB, CLOB, LONG VARCHAR FIR BIT DATA ani XML
- ’nazwa_parametru’ nie może się powtarzać w funkcji
- … Oznacza możliwość użycia 'varargs’ (zmienna liczba argumentów) czyli 0 lub więcej danych o typie
ostatniego argumentu - ZwracanyTypDanych. Oznacza typ Derby albo 'TypTabelaryczny’
- TypTabelaryczny. Musi być zapisany jako: TABLE(ColumnElement [,ColumnElement]*), gdzie:
- TABLE. Funkcja zwracająca 'TypTabelaryczny’ jest funkcją tabelaryczną typu Derby (na razie jedyny dozwolony typ) zwracającą zbiór wynikowy JDBC typu ResultSet
- ColumnElement. Nazwa typu Derby w danej kolumnie. Nie może być XML
- TypTabelaryczny. Musi być zapisany jako: TABLE(ColumnElement [,ColumnElement]*), gdzie:
- ElementFunkcji. Musi być zapisany jako:
- { | LANGUAGE { JAVA } | CharakterystykaDeterministyczna| EXTERNAL NAME łańcuch | PARAMETER STYLE styl_parametru | EXTERNAL SECURITY {DEFINER | INVOKER}| {NO SQL | CONTAINS SQL | READS SQL DATA}| {RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT}}
- JAVA. – na razie Java jest jedyną możliwością. Użycie oznacza, że zostanie użyta sta tyczna metoda Javy.
- CharakterystykaDeterministyczna. Można wpisać jedną z dwóch możliwości
- DETERMINISTIC – oznacza, że przy przy podaniu określonego zestawu wartości wejściowych zawsze na wyjściu otrzymamy ten sam wynik. Dokumentacja Derby zaleca ostrożność przy użyciu tej opcji, gdyż Derby nie ma możliwości rozpoznania czy wykonywana operacja jest aktualnie deterministyczna
- NOT DETERMINISTIC – domyślna. Podając określony zestaw wartości wejściowych nie zawsze otrzymamy ten sam wynik
- łańcuch. Pełna nazwa metody Java tj. 'pakiety.klasa.metoda_statyczna’
- styl_parametru. Możemy wybrać jedną z trzech opcji: DERBY | DERBY_JDBC_RESULT_SET | JAVA
- DERBY – używany tylko w przypadku gdy na końcu listy argumentów pojawi się (…)
- DERBY_JDBC_RESULT_SET – używa się tylko w przypadku, gdy funkcja jest funkcją tabelaryczną.
- JAVA – w pozostałych przypadkach. Oznacza to, że funkcja używa konwencji podawania parametrów określonej dla języka Java i specyfikacji SQL. Parametry INOUT i OUT są podawane jako pojedyncze tablice. Zbiory wynikowe mogą być zwracane jako dodatkowe parametry podawane do metody Java w postaci pojedynczych tablic java.sql.ResultSet[]
- DEFINER | INVOKER. Jeśli uruchomiona jest autoryzacja, funkcja zawsze jest wykonywana z przywilejami wyspecyfikowanymi dla użytkownika wywołującego, czyli tak jakbyśmy użyli opcji INVOKER. Jeśli chce się zapewnić, że funkcja będzie wykonywana z przywilejami wyspecyfikowanymi dla użytkownika, który definiował funkcję należy podać opcję DEFINER
- NO SQL | CONTAINS SQL | READS SQL DATA. Określa czy w funkcji są używane polecenia SQL, a jeśli tak to jakiego typu.
- NO SQL – funkcja nie może wykonywać żadnych poleceń SQL
- CONTAINS SQL – Wskazuje, że funkcja wykonuje polecenia SQL(które nie odczytują ani nie modyfikują danych SQL)
- READS SQL DATA – domyślne – funkcja wykonuje polecenia SQL (które nie modyfikują danych)
- RETURNS NULL ON NULL IMPUT | CALLED ON NULL INPUT
- RETURNS NULL ON NULL INPUT – jeśli jeden z podanych argumentów jest 'NULL’ funkcja nie jest wywoływana, a otrzymany wynik jest 'NULL’
- CALLED ON NULL IMPUT – jeśli jeden lub więcej argumentów jest 'NULL’ funkcja jest wywoływana. Zakłada, że funkcja testuje, które z argumentów są 'NULL’ i zapewnia odpowiednie 'postępowanie’. Zwracana wartość może być 'NULL’ lub nie