Después de muchas búsquedas de Google y SO, no puedo encontrar una respuesta definitiva a esta simple pregunta:¿Cuál es la sintaxis para definir un procedimiento de Oracle dentro de otro procedimiento almacenado?
¿Cómo puedo definir un procedimiento dentro de otro procedimiento para usar?
Sé que hay bloques anidados y procedimientos anidados, pero no he visto la sintaxis exacta para lo que quiero. es decir
create or replace
PROCEDURE TOP_PROCEDURE
(...)
IS
-- nested procedure here?
BEGIN
NULL;
END;
La respuesta de Tony es perfecta, pero tengo que preguntar por qué querrías hacer esto. He visto procedimientos anidados usados, pero nunca los he visto usar bien. Es decir, casi siempre sería mejor colocar el procedimiento en un paquete (si aún no está en un paquete) y crear métodos privados en el paquete para los procedimientos anidados. De lo contrario, se vuelve bastante confuso seguir el código y conduce a la práctica bastante pobre de tener esencialmente todas las variables locales TOP_PROCEDURE como variables globales en el contexto de los procedimientos anidados. –
Utilizo procedimientos anidados con bastante frecuencia, generalmente para funciones pequeñas que son muy específicas de su procedimiento principal (es decir, simplemente no tienen ningún sentido el hecho de que no puedan llamarlo), de lo contrario repetiría el mismo código más de una vez en el procedimiento principal. –
Tu punto es definitivamente válido Justin, pero la verdad es que solo lo estoy usando de la manera que Jeffrey especifica. También fue realmente una pregunta por curiosidad también. Es una forma rápida de refactorizar mi código. – daveslab