# Instrução CREATE FUNCTION

A instrução CREATE FUNCTION permite criar funções Java que podem ser utilizadas em expressões.

#### Sintaxe

    CREATE FUNCTION nome-da-função ( [ parâmetro-da-função
       [, parâmetro-da-função] ] * ) RETURNS tipo-de-dado [ elemento-da-função ] *

#### nome-da-função

    [ nome-do-esquema. ] IdentificadorSQL92

Se o nome-do-esquema não for fornecido, o esquema corrente se tornará o esquema padrão. Se for especificado um nome de procedimento qualificado, o nome do esquema não poderá começar por SYS.

#### parâmetro-da-função

    [ nome_do_parâmetro ] tipo-de-dado

O nome_do_parâmetro deve ser único na função.

A sintaxe do tipo-de-dado está descrita em Tipos de dado.

Nota: Os tipos-de-dado longos, como LONG VARCHAR, LONG VARCHAR FOR BIT DATA, CLOB e BLOB, não são permitidos como parâmetros da instrução CREATE FUNCTION.

#### elemento-da-função

     {
    | LANGUAGE { JAVA }
    | EXTERNAL NAME cadeia-de-caracteres
    | PARAMETER STYLE JAVA
    | { NO SQL | CONTAINS SQL | READS SQL DATA }
    | { RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }
     }

#### LANGUAGE

JAVA- o gerenciador de banco de dados chama a função como um método estático público de uma classe Java.

#### EXTERNAL NAME cadeia-de-caracteres

A cadeia-de-caracteres descreve o método Java a ser chamado quando a função for executada, e possui a seguinte forma:

    nome-da-classe.nome-do-método

O EXTERNAL NAME (nome externo) não pode conter espaços indevidos.

#### PARAMETER STYLE

JAVA - A função utiliza uma convenção de passagem de parâmetros em conformidade com a linguagem Java e com a especificação de rotinas SQL. Os parâmetros INOUT e OUT são passados como matrizes de uma única entrada para facilitar o retorno de valores. Os conjuntos de resultados são retornados através de parâmetros adicionais para um método Java do tipo java.sql.ResultSet[] passados como matrizes de uma única entrada.

O Derby não suporta tipos de coluna longos (por exemplo, LONG VARCHAR, BLOB, etc.). Ocasiona erro tentar utilizar um destes tipos de coluna longos.

#### NO SQL, CONTAINS SQL, READS SQL DATA

Indica se a função emite instruções SQL e, se o fizer, de que tipo.

CONTAINS SQL
  Indica que podem ser executadas pela função instruções SQL que não lêem nem modificam dados SQL. As instruções não suportadas por qualquer função retornam um erro diferente.
NO SQL
  Indica que a função não pode executar nenhuma instrução SQL.
READS SQL DATA
  Indica que podem ser incluídas na função instruções SQL que não modificam dados SQL. As instruções não suportadas por qualquer função retornam um erro diferente. Este é o valor padrão.

#### RETURNS NULL ON NULL INPUT ou CALLED ON NULL INPUT

Especifica se a função será chamada quando algum de seus argumentos de entrada for nulo.

RETURNS NULL ON NULL INPUT
  Especifica que a função não será chamada quando o valor de algum de seus argumentos de entrada for nulo. O resultado será o valor nulo.
CALLED ON NULL INPUT
  Especifica que a função será chamada quando o valor de algum de seus argumentos de entrada for nulo. Esta especificação significa que a função deve ser codificada para testar nulos nos valores dos argumentos. A função poderá retornar um valor nulo, ou não nulo. Esta é a definição padrão.

Os elementos da função podem estar em qualquer ordem, mas cada tipo de elemento só pode aparecer uma vez. A definição da função deve conter estes elementos:

- LANGUAGE
- PARAMETER STYLE
- EXTERNAL NAME

#### Exemplo

    CREATE FUNCTION rad_graus(radianos DOUBLE) RETURNS DOUBLE
    PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
    EXTERNAL NAME 'java.lang.Math.toDegrees'

Tópico pai: Instruções CREATE
Referências relacionadas
Instrução CREATE INDEX
Instrução CREATE PROCEDURE
Instrução CREATE SCHEMA
Instrução CREATE SYNONYM
Instrução CREATE TABLE
Instrução CREATE TRIGGER
Instrução CREATE VIEW