Aria, Jack Russell terrier, logo działu

Apache Derby – tutorial

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 nazwaFunkcji ( [ ParametrFunkcji [,
ParametrFunkcji]* [...] ] ) RETURNS ZwracanyTypDanych [
ElementFunkcji ]*

nazwaFunkcji

Nazwa funkcji 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.

Nawiasy okrągłe

Po nazwie funkcji występują nawiasy okrągłe.

ParametrFunkcji

Parametr funkcji może nie występować albo może występować jeden
parametr lub więcej parametrów.

Jeżeli parametry występują, umieszczone są pomiędzy nawiasami i
oddzielone są przecinkami.

Parametr funkcji musi być podany w postaci:

[nazwaParametru] TypDanych

Typ danych to typ danych Derby. Nie może to być BLOB, CLOB,
LONG VARCHAR FIR BIT DATA ani XML

Nazwa parametru nie może się powtarzać w funkcji.

ZwracanyTypDanych

Zwracany typ danych to jeden z 2 typów:

  • TypDanych – opisany powyżej
  • TypTabelaryczny

TypTabelaryczny

Typ tabelaryczny musi być zapisany jako:

TABLE(ColumnElement [,ColumnElement]*), gdzie:

  • TABLE to typ zwracany przez funkcję tablicową. Na razie jedynym
    dozwolonym typem są funkcje tabelaryczne typu Derby czyli funkcje
    zwracające zbiór wynikowy JDBC typu ResultSet.
  • ColumnElement. Nazwa typu Derby w danej kolumnie. Nie może być XML

ElementFunkcji

Jego składnia jest następująca:

{
LANGUAGE JAVA |
{DETERMINISTIC | NOT DETERMINISTIC} |
EXTERNAL NAME łańcuch_znaków |
PARAMETER STYLE { JAVA | DERBY_JDBC_RESULT_SET | DERBY } |
EXTERNAL SECURITY {DEFINER | INVOKER} |
{NO SQL | CONTAINS SQL | READS SQL DATA}|
{RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT}
}

Kolejność elementów jest obojętna.

Elementy, które są obowiązkowe (muszą wystąpić):

  • LANGUAGE
  • EXTERNAL NAME
  • PARAMETER STYLE
  • LANGUAGE JAVA – na razie JAVA jest jedyną możliwością. Użycie oznacza,
    że zostanie użyta statyczna metoda Javy.
  • Charakterystyka deterministyczna. 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
  • EXTERNAL NAME łańcuch. Łańcuch to pełna nazwa metody Java tj.
    ‘pakiety.klasa.metoda_statyczna’
  • PARAMETER STYLE. 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[]
  • EXTERNAL SECURITY. Jeśli uruchomiona jest autoryzacja, funkcja
    zawsze jest wykonywana z przywilejami podanymi 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 podanymi dla
    użytkownika, który zdefiniował 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.