Oracle External Procedures
External procedures é uma tecnologia da linguagem PL/SQL que permite criar procedimentos e funções usando outra linguagem de programação.
Introdução
External procedures é uma tecnologia da linguagem PL/SQL↳SQL64 conteúdosSQL Server – Como evitar SQL Injection?Data · mai 2019Azure SQL DB Managed InstanceData · abr 2019SQL Server – Como evitar SQL Injection? Pare de utilizar Query Dinâmica como EXEC(@Query)Data · abr 2019Ver tudo em Data → que permite a criação de procedimentos e funções utilizando outra linguagem de programação. Esse recurso nada mais é que uma rotina de uma linguagem gravada em uma dynamic link library (DLL), conhecida pelo banco de dados e executada como se fosse um subprograma PL/SQL.
Note que, por ser gravado em DLL, esse recurso só estará disponível em sistemas operacionais que dispõem dele recurso ou que disponham de dynamically loadable shared libraries como o Oracle Solaris.
Utilidade
Pode-se usar diversos recursos que o PL/SQL não possui por ser uma ferramenta muito específica, utilizando uma outra linguagem, como C, Java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) →, Cobol. Dessa maneira, os usuários dessa tecnologia podem usufruir do melhor que cada linguagem oferece e usar dentro do PL/SQL.
Outras Utilidades:
- Mover o processamento feito no cliente para o servidor;
- Reutilizar código feito em outra linguagem;
- Desempenho (uso de linguagens propícias para certas operações).
Criando uma external procedure
Para este exemplo, será feito uso da linguagem Java. Esse procedimento pode ser feito de duas maneiras. A primeira delas consiste em apresentar uma classe compilada ao banco de dados; a outra, usar o JDK do próprio banco de dados.
Usando a primeira forma, deve-se primeiro criar o diretório no qual o Oracle irá procurar as classes compiladas.
[oracle@bernardo artigo]$ pwd /home/oracle/artigo [oracle@bernardo artigo]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Tue Aug 20 09:11:07 2013 Copyright (c) 1982, 2011, Oracle. All rights reserved. Conectado a: Oracle Database 11g Release 11.2.0.3.0 - 64bit Production SQL> create directory artigo_dir as 'home/oracle/artigo'; Diretorio criado.
Quadro 1 – Criando diretório Oracle
Observe que no Quadro 1 o usuário autenticou-se como sysdba, ou seja, possui todos os privilégios do banco, porém, nem sempre um usuário tem tal privilégio. Para conceder, use o comando abaixo:
SQL> grant create any directory to usuario_xyz;
O segundo passo é carregar a classe compilada no banco de dados. O Oracle so irá carregar esta classe para a memória no momento em que a mesma for usada, portanto, não há impacto no desempenho.
SQL> create java class using bfile (artigo_dir,'Calculadora.class'); 2 / Java created.
Quadro 2 – Carregando via arquivo class
Caso opte por compilar a classe no banco, deve-se usar o utilitário loadjava:
[oracle@bernardoartigo]$ loadjava -user usuario/senha /home/oracle/artigo/Calculadora.java -resolve
Quadro 3 – Carregando através do compilador do banco
Para exemplificar, uma classe simples Java com apenas um método que soma dois números inteiros.
public class Calculadora {
public static int soma(int a, int b){
return a+b;
}
}
Quadro 4 – Classe Calculadora
Publicando a classe
Para acessar o método “soma” da classe “Calculadora” deve-se primeiro criar uma stored procedure que responde por este método, isto é uma limitação desta tecnologia, não se pode chamar uma classe Java diretamente, precisa-de uma função intermediária. Nestas funções indicamos através do comando AS LANGUAGE que esta, tem o retorno na linguagem especificada.
SQL> create or replace FUNCTION calculadora (A NUMBER, B NUMBER) RETURN NUMBER AS
LANGUAGE JAVA
NAME 'Calculadora.soma(int,int) return int';
/
Function created.
Quadro 5 – Publicando o método Java
Observa-se no Quadro 5 que carrega-se um método da classe e que se especifica a assinatura completa do mesmo; no exemplo, não havia organização por pacotes, mas seria necessário se existisse.
Com a função intermediária criada, já se tem o necessário para desfrutar do código escrito na linguagem Java e chamá-lo através do banco de dados.
SQL> set serveroutput on;
SQL> declare
r number;
begin
r:= calculadora(2,7);
dbms_output.put_line('Resultado:'||r);
end;
/
Resultado:9
PL/SQL procedure successfully completed.
Quadro 6 – Chamando a external procedure
Troubleshooting
Ao tentar compilar a função recebe o erro:
System error : java/lang/UnsupportedClassVersionError oracle stored procedure
Esse erro se dá pelo fato de que a versão do JDK dentro do Oracle é diferente da versão que compilou a classe. Deve-se ter certeza de que o javac que compilou a classe é menor ou igual a versão do JDK da Oracle.
Para verificar a versão do jdk usado no banco segue o comando:
#cd $ORACLE_HOME/jdk/bin #java –version
Quadro 7 – Verificando o JDK do banco







