2011-07-21 30 views
9

Estoy creando un procedimiento en un paquete. He actualizado la especificación del paquete y luego, cuando estoy actualizando el cuerpo del paquete, me muestra el siguiente error.Error de PLS-00323 en el oráculo

[Error] PLS-00323 (314: 13): PLS-00323: subprograma o 'INSERT_CUSTOMER_ADDRESS' cursor se declara en una especificación de paquete y debe estar definido en el cuerpo del paquete

NB: INSERT_CUSTOMER_ADDRESS es mi nombre de procedimiento.

+5

Puede ser demasiado obvio, pero compruebe dos veces si el nombre del procedimiento es exactamente el mismo, así como todos los parámetros que recibe. –

+0

Entendido, solo falta una letra del nombre de un parámetro. – Amit

+0

mismo error aquí alrededor de media hora tratando con eso. muchas gracias. – BlaShadow

Respuesta

2

Si crea un procedimiento en la especificación del paquete, debe ser creado \ implementado en el cuerpo del paquete. Considere la especificación de su paquete como una interfaz y el cuerpo del paquete como su implementación.

+0

Sí, he agregado el código de procedimiento en el cuerpo del paquete. Esa no es la causa del error. De alguna manera, cuando actualizo el cuerpo del procedimiento, no incluye el nuevo procedimiento, aunque está dentro del cuerpo del paquete. – Amit

+0

Parece un error extraño. Todo está bien, aún así no está creando. – Amit

10

Como lo he experimentado muchas veces, está relacionado con tu definición de la función/procedimiento (quiero decir nombres de variables y sus tipos correspondientes), si hay una variable que está en el cuerpo y no en la especificación, esto causa este error esto es un error común no se preocupe!

1

especificación: FUNCIÓN ITEM_ACTIVE (SKU_NUM EN NÚMERO) RETURN BOOLEAN;

Cuerpo: FUNCIÓN ITEM_ACTIVE (P_SKU_NUM EN NÚMERO) RETURN BOOLEAN;

Cambie la especificación o el cuerpo para que coincida exactamente.

HTH!

2

Siempre la declaración en la especificación del paquete y el cuerpo del paquete debe ser la misma.

Lo que significa que el procedimiento/función declarada en la especificación de paquete (incluye el nombre del procedimiento/función, tipo de parámetro) debe ser exactamente el mismo.

Nota: cuando Oracle compila el paquete para el caso de error anterior, no le dará la línea exacta no.

+0

Parece que el problema ya se resolvió en los comentarios, y solo está volviendo a incluir los comentarios en esta respuesta. –

+0

¡_Note_ es útil! – user3454439

1

Debido viejos errores de alguien siempre son una novedad para mí, voy a añadir mis 3 centavos:

alguien ha eliminado sus especificaciones, pero todavía tenía el cuerpo (No, no sé cómo) y "didn No quiero tener que escribir todo eso nuevamente ".

Así que les mostraron cómo generar la especificación del cuerpo:

  1. Copiar el cuerpo en una hoja de cálculo.
  2. Inserta un encabezado vacío sobre el cuerpo con el nombre del paquete.
  3. Compilar.
  4. [Si obtiene un error o no,] Haga clic derecho en el cuerpo del paquete en el árbol de paquetes, y seleccione "Sincronizar la especificación y el cuerpo".
  5. Seleccione qué objetos exponer en la especificación y haga clic en Aceptar.
  6. "magia sucede"

Sólo la magia no sucedió - y todo se volvió de color rojo ... con PLS-00323 errores.

SQL Developer llena las especificaciones del paquete tirando del procedimiento y los encabezados de funciones del código en sí, por lo que no debería preocuparse por las cosas. Presenta una lista de objetos para agregar al paquete/especificación, y usted elige cuáles agregar.

Seleccionamos los procedimientos y funciones correctos, pero se compilaron con errores. De nuevo. Y otra vez.

Resulta que las funciones que arrojaron errores se definieron en el cuerpo del paquete con DETERMINISTIC - cuando el editor de SQL Dev hizo la sincronización, omitió la palabra. Eso es bastante significativo.

De todos modos, revisado, pegado DETERMINISTIC en las funciones específicas antes del punto y coma, guardado (recompilado), y luego fue mágico de nuevo.

Es de esperar que SQL Developer haga el trabajo completo, en lugar de un trabajo medio ...

Cuestiones relacionadas