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

Busca

março 2023
D S T Q Q S S
 1234
567891011
12131415161718
19202122232425
262728293031  

Categorias