2011-07-21 14 views
9

Sto creando una procedura in un pacchetto. Ho aggiornato le specifiche del pacchetto e poi quando sto aggiornando il corpo del pacchetto mi mostra il seguente errore.Errore PLS-00323 in Oracle

[Error] PLS-00323 (314: 13): PLS-00323: sottoprogramma o cursore 'INSERT_CUSTOMER_ADDRESS' è dichiarata in una specifica pacchetto e devono essere definite nel corpo del pacchetto

NB: INSERT_CUSTOMER_ADDRESS è il nome della mia procedura.

+5

Potrebbe essere troppo ovvio, ma ricontrollare se il nome della procedura è esattamente lo stesso, così come tutti i parametri che riceve. –

+0

Capito, solo una lettera mancata dal nome di un parametro. – Amit

+0

stesso errore qui intorno a mezz'ora a che fare con quello. molte grazie. – BlaShadow

risposta

2

Se si crea una procedura nelle specifiche del pacchetto, questa deve essere creata \ implementata nel corpo del pacchetto. Considerare le specifiche del pacchetto come un'interfaccia e il corpo del pacchetto come sua implementazione.

+0

Sì, ho aggiunto il codice di procedura nel corpo del pacchetto. Questa non è la causa dell'errore. In qualche modo quando aggiorno il corpo della procedura non include la nuova procedura, sebbene si trovi all'interno del corpo del pacchetto. – Amit

+0

Sembra uno strano errore. Va tutto bene, ancora non crea. – Amit

10

Come ho sperimentato molte volte, è correlato alla definizione della funzione/procedura (intendo i nomi delle variabili e i loro tipi corrispondenti), se c'è una variabile che è nel corpo e non nelle specifiche, questo sarà causa questo errore questo è un errore comune non preoccuparti!

1

Specifica: FUNZIONE ITEM_ACTIVE (SKU_NUM IN NUMERO) RETURN BOOLEAN;

Corpo: FUNZIONE ITEM_ACTIVE (P_SKU_NUM IN NUMERO) RETURN BOOLEAN;

Modificare le specifiche o il corpo in modo che corrisponda esattamente.

HTH!

2

Sempre la dichiarazione sulla specifica del pkg e il corpo del pkg devono essere uguali.

Ciò significa che la procedura/funzione dichiarata nelle specifiche pkg (include il nome della procedura/funzione, Tipo di parametro) dovrebbe essere esattamente la stessa.

Nota: quando oracle compila il pkg per il caso di errore di cui sopra, non fornirà la riga esatta n.

+0

Sembra che il problema sia già stato risolto nei commenti e stai solo rimodellando i commenti in questa risposta. –

+0

Il _Note_ è utile! – user3454439

1

Perché i vecchi errori di qualcuno sono sempre novità per me, io aggiungo i miei 3 centesimi:

Qualcuno cancellato la loro specifica, ma aveva ancora il corpo (No, non so come) e "didn Non voglio dover digitare tutto in quel modo ".

Così li ho mostrato come generare le specifiche dal corpo:

  1. Copiare il corpo in un foglio di lavoro.
  2. Inserire un'intestazione vuota sopra il corpo con il nome del pacchetto.
  3. Compila.
  4. [Se si verifica un errore o meno,] Fare clic con il pulsante destro del mouse sul corpo del pacchetto nell'albero dei pacchetti e selezionare "Sincronizza specifica e corpo".
  5. Selezionare gli oggetti da esporre nella specifica e fare clic su OK.
  6. "magia accade"

Solo la magia non è accaduto - e tutto è andato rosso ... con PLS-00323 errori.

SQL Developer popola la specifica del pacchetto estraendo la procedura e le intestazioni di funzione dal codice stesso, quindi non dovresti preoccuparti di cose come la psiche di liek. Presenta un elenco di oggetti da aggiungere al pacchetto/specifica e tu scegli quali aggiungere.

Abbiamo selezionato le procedure e le funzioni corrette, ma è stato compilato con errori. Ancora. E di nuovo.

Si scopre che le funzioni che hanno generato errori sono state definite nel corpo del pacchetto con DETERMINISTIC - quando l'editor di SQL Dev ha eseguito la sincronizzazione, ha lasciato fuori parola. Questo è abbastanza significativo.

In ogni caso, rivisto, incollato DETERMINISTIC nelle funzioni specifiche prima del punto e virgola, salvato (ricompilato), e quindi era di nuovo magico.

Ci si aspetterebbe che lo sviluppatore SQL esegua il lavoro completo anziché un lavoro half -....