Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-06508:PL/SQL:não foi possível encontrar a unidade do programa sendo chamada


Suspeito que você esteja apenas relatando o último erro em uma pilha como esta:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "schema.package" has been invalidated
ORA-04065: not executed, altered or dropped package body "schema.package"
ORA-06508: PL/SQL: could not find program unit being called: "schema.package"

Se sim, é porque seu pacote é stateful:

Os valores das variáveis, constantes e cursores que um pacote declara (em sua especificação ou corpo) compreendem seu packagestate . Se um pacote PL/SQL declara pelo menos uma variável, constante ou cursor, então o pacote é com estado; caso contrário, é sem estado .

Quando você recompila o estado é perdido:

Se o corpo de um pacote com estado instanciado for recompilado (explicitamente, com a "Instrução ALTER PACKAGE", ou implicitamente), a próxima chamada de um subprograma no pacote fará com que o Banco de Dados Oracle descarte o estado do pacote existente e gere a exceção ORA-04068.

Depois que o PL/SQL gera a exceção, uma referência ao pacote faz com que o Oracle Database reinstancie o pacote, que o reinicializa...

Você não pode evitar isso se seu pacote tiver estado. Eu acho que é bastante raro precisar realmente de um pacote para ser stateful, então você deve revisitar qualquer coisa que você tenha declarado no pacote, mas fora de uma função ou procedimento, para ver se é realmente necessário nesse nível. Como você está no 10g, isso inclui constantes, não apenas variáveis ​​e cursores.

Mas o último parágrafo da documentação citada significa que da próxima vez que você referenciar o pacote na mesma sessão, você não receberá o erro e funcionará normalmente (até que você recompile novamente).