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 323 outros assinantes

Busca

agosto 2020
DSTQQSS
 1
2345678
9101112131415
16171819202122
23242526272829
3031 

Categorias