Utilizando NOCOPY no Oracle

[ad#texto]

Já comentei sobre o modo como o PL/SQL lida com os parâmetros enviados, ele simplesmente movimenta todo o conteúdo ao invés de apenas acessar a instancia daquele objeto (parâmetro) em memória, em consequência temos uma gradativa perda de performance quando passamos parâmetros maiores como um CLOB ou até mesmo uma PL Table.

Uma das soluções que apresentei foi definir a variável de forma global, assim tanto o objeto chamador como o objeto chamado teriam acesso a variável sem a necessidade que o conteúdo da mesmo transitasse como parâmetro, mas e se por questões técnicas não pudéssemos trabalhar desta forma?

Teríamos então que utilizar a cláusula NOCOPY na definição dos parâmetros, isso iria instruir ao PL/SQL para não movimentar todo o conteúdo do parâmetro, o mesmo seria somente “pontuado”, veja um exemplo:

Movimentando todo o conteúdo:

PROCEDURE pc_teste(varNome  IN VARCHAR2) IS
 
...

Apenas apontoando para o parâmetro:

PROCEDURE pc_teste(varNome  IN OUT NOCOPY VARCHAR2) IS
 
...

Porém é preciso tomar cuidado com alguns detalhes:

  • É obrigatório o uso de parâmetros no formato IN OUT, somente IN ou somente OUT irá reportar erros de compilação;
  • Parâmetros com NOCOPY não podem ser debugados o que pode dificultar no momento de detectar possíveis bugs na sua aplicação.
Petter Rafael
Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 319 outros assinantes

Busca

abril 2021
D S T Q Q S S
 123
45678910
11121314151617
18192021222324
252627282930  

Categorias