# Instrução CREATE PROCEDURE

A instrução CREATE PROCEDURE permite criar procedimentos armazenados em Java, que podem ser chamados utilizando a instrução CALL PROCEDURE.

#### Sintaxe

    CREATE PROCEDURE nome-do-procedimento ( [ parâmetro-do-procedimento
       [, parâmetro-do-procedimento] ] * )
    [ elemento-do-procedimento ] *

#### nome-do-procedimento

    [ nome-do-esquema. ] IdentificadorSQL92

Se o nome-do-esquema não for fornecido, o esquema corrente será 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-do-procedimento

    [ { IN | OUT | INOUT } ] [ nome-do-parâmetro ] tipo-de-dado

O valor padrão para o parâmetro é IN. O nome-do-parâmetro deve ser único no procedimento.

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 podem ser usados como parâmetros nas instruções CREATE PROCEDURE.

#### elemento-do-procedimento

     {
    | [ DYNAMIC ] RESULT SETS INTEGER
    | LANGUAGE { JAVA }
    | EXTERNAL NAME cadeia-de-caracteres
    | PARAMETER STYLE JAVA
    | { NO SQL | MODIFIES SQL DATA | CONTAINS SQL | READS SQL DATA }
     }

#### DYNAMIC RESULT SETS integer

Indica o limite superior estimado de conjuntos de resultados retornados pelo procedimento. O padrão é sem (zero) conjuntos de resultados dinâmicos.

#### LANGUAGE

JAVA - o gerenciador de banco de dados chama o procedimento 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 o procedimento for executado, e possui a seguinte forma:

    nome_da_classe.nome_do_método

O nome externo não pode conter espaços.

#### PARAMETER STYLE

JAVA - O procedimento 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 [] que são 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, MODIFIES SQL DATA

Indica se o procedimento armazenado emite instruções SQL e, se o fizer, de que tipo.

CONTAINS SQL
  Indica que podem ser executadas pelo procedimento armazenado instruções SQL que não lêem nem modificam dados SQL. As instruções não suportadas por qualquer procedimento armazenado retornam um erro diferente. O valor padrão é MODIFIES SQL DATA.
NO SQL
  Indica que o procedimento armazenado não pode executar nenhuma instrução SQL.
READS SQL DATA
  Indica que podem ser incluídas no procedimento armazenado algumas instruções SQL que não modificam dados SQL. As instruções não suportadas por qualquer procedimento armazenado retornam um erro diferente.
MODIFIES SQL DATA
  Indica que o procedimento armazenado pode executar qualquer instrução SQL, exceto as instruções não suportadas por procedimentos armazenados.

Os elementos do procedimento podem estar em qualquer ordem, mas cada tipo de elemento pode aparecer somente uma única vez. A definição do procedimento deve conter os seguintes elementos:

- LANGUAGE
- PARAMETER STYLE
- EXTERNAL NAME

#### Exemplo

    CREATE PROCEDURE VENDAS.RENDIMENTO_TOTAL(IN V_MÊS INTEGER,
    IN V_ANO INTEGER, OUT TOTAL DECIMAL(10,2))
    PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME
    'com.acme.vendas.calculaRendimentoPorMes'

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