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
.
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
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'