PLS-00375: Adreçant-se vers un destí inaccessible
Error
Quan tracto de compilar el meu procediment llançadora em surt el següent missatge d'error, ¿Què és el que passa?
ERROR at line 32:
ORA-06550: line 32, column 12:
PLS-00375: illegal GOTO statement ;
this GOTO cannot branch to label
'PROCEDIMENT3'
ORA-06550: line 39, column 13:
PL/SQL: Statement ignored
Resposta
Bé, si et fixes amb la pila d'error, veuràs que el primer, l'ORA-06550 et fixa l'error, i el segon el PLS-00375 et diu el que l'ha causat.
El que passa és que has construït una estructura de control de manera incorrecta, donat que la instrucció GOTO té un abast (SCOPE) limitat.
El següent exemple de codi, et mostra com usar la instrucció GOTO de manera correcta i incorrecta en la teva llançadora:
.....
..PROCEDIMENT_1(param1, param2, v_ctrl_exec);
..If v_ctrl_exec = 'WRN' Then
....GOTO PROCEDIMENT3;
..Elsif v_ctrl_exec = 'KO' Then
....param3 := v_ctrl_exec;
....Raise ErrorProc;
..End If;
..<<PROCEDIMENT2>>
..PROCEDIMENT_2(param1, param2, v_ctrl_exec);
..If v_ctrl_exec = 'WRN' Then
....GOTO PROCEDIMENT4;
..Elsif v_ctrl_exec = 'KO' Then
....param3 := v_ctrl_exec;
....Raise ErrorProc;
..End If;
..<<PROCEDIMENT3>>
..PROCEDIMENT_3(param1, param2, v_ctrl_exec);
..If v_ctrl_exec = 'WRN' Then
....GOTO PROCEDIMENT5;
..Elsif v_ctrl_exec = 'KO' Then
....param3 := v_ctrl_exec;
....Raise ErrorProc;
..End If;
..PROCEDIMENT_X(v_ctrl_exec);
..If v_ctrl_exec = 'WRN' Then
....GOTO PROCEDIMENTY;
..Elsif v_ctrl_exec = 'KO' Then
....param3 := v_ctrl_exec;
....Raise ErrorProc;
..Elsif v_ctrl_exec = 'OK' Then
....param3 := v_ctrl_exec;
..<<PROCEDIMENT4>>
....PROCEDIMENT_4(param1, param2, v_ctrl_exec);
..End If;
.....
Fixa't que el destí del GOTO (el segon), que ens adreça al procediment PROCEDIMENT_4 està dins d'una estructura de control If-Then-Else. En intentar adreçar l'execució dins del bloc de control directament, l'IF no s'avuluarà per tant Oracle ens retornarà l'error PLS-00375 en intentar compilar el programa.
Mentre que el destí del GOTO (el primer) que ens adreça al procediment PROCEDIMENT_3, està ben construït perque el destí està al seu abast, no és dins de cap bloc de control If-Then-Else.

0 comentarios:
Publica un comentari