Parâmetros do tipo IN: são recebidos pela procedure
Parâmetros do tipo OUT: são retornados da procedure e recebidos pelo ambiente chamador (Forms, Report, PL/SQL e outros subprogramas)
Parâmetros do tipo IN OUT: são recebidos pela procedure e retornados/recebidos pelo ambiente chamador.
OBS.: Parâmetros do tipo IN: Passagem de parâmetro POR VALOR
Parâmetros do tipo OUT e IN OUT: Passagem de parâmetro POR REFERÊNCIA
Fonte: Dominando o Oracle 9i: modelagem e desenvolvimento
As bancas gostam de confundir o tipo de parâmetro com o modo de parâmetro. Fiquem atentos a essa diferença e não esqueçam que elas confundem mesmo. Tem inclusive uma questão da CESPE que diz:
CESPE: Em PL/SQL, parâmetros cujo tipo não esteja explicitamente declarado são considerados como do tipo IN. (GABARITO: CORRETO)
Apesar de a CESPE marcar como correto pois o comportamento existe,
o que deixou de ser especificado foi o modo e não o tipo (tipo seria
VARCHAR(2), INTEGER, BOOLEAN, etc.).
Segundo NAVATHE:
"Em geral, cada parâmetro deve ter um tipo de parâmetro, o qual é um dos tipos de dados da SQL. Cada parâmetro também deve ter um modo de parâmetro,
que é um dentre IN, OUT, ou INOUT. Estes correspondem a parâmetros
cujos valores são apenas de entrada, apenas de saída (retornados) ou de
entrada e saída, respectivamente."