Il comando ALTER PROCEDURE

Usate il comando ALTER PROCEDURE per modificare una stored procedure.

È possibile modificare il valore di ritorno, l'impostazione di esecuzione, il proprietario e il corpo di una procedura, ma non è possibile modificare il nome o l'elenco degli argomenti con questo comando. È possibile aggiungere o rimuovere il valore VARARGS in un elenco di argomenti altrimenti vuoto.

Per modificare il nome o l'elenco di argomenti di una stored procedure, è necessario abbandonare la procedura e creare una procedura con il nuovo nome o il nuovo elenco di argomenti.

Sintesi

ALTER PROCEDURE <name> (<args>) [ RETURNS <type>]
[ EXECUTE AS OWNER | EXECUTE AS CALLER ] [AS <procedure_body>];
ALTER PROCEDURE <name> (<args>) OWNER TO <user>;

Input

Il comando ALTER PROCEDURE riceve i seguenti input:

Tabella 1. ALTER PROCEDURA input
Immissione Descrizione
Nome Il nome della stored procedure che si desidera modificare. Non è possibile modificare il nome della procedura. La procedura deve essere definita nel database a cui si è connessi.

Per i sistemi che supportano più schemi, è possibile specificare un nome nel formato schema.procedure per modificare una procedura in uno schema diverso del database corrente.

args Un elenco di tipi di dati degli argomenti di input per la stored procedure. È inoltre possibile specificare il valore VARARGS per creare una procedura ad argomenti variabili in cui gli utenti possono inserire fino a 64 valori di qualsiasi tipo di dati supportati. VARARGS è un valore mutuamente esclusivo; non è possibile specificare altri argomenti nell'elenco.

Non è possibile modificare l'elenco degli argomenti o le dimensioni. È possibile rimuovere VARARGS dall'elenco degli argomenti o aggiungerlo a un elenco di argomenti altrimenti vuoto.

RETURNS <tipo> Specifica il tipo di dati restituiti dalla procedura. Il valore <tipo>può essere un tipo di dati Netezza Performance Server o il valore REFTABLE (<nome-tabella>) per indicare che restituisce un set di risultati che assomiglia alla tabella specificata. La tabella deve esistere e continua a esistere anche dopo la procedura. La tabella può essere vuota, ma deve esistere nel database.
ESEGUIRE COME PROPRIETARIO Se specificato, la stored procedure utilizza l'ID del proprietario della procedura per tutti i controlli di accesso e di autorizzazione. Questo è il valore predefinito.
ESEGUIRE COME CHIAMANTE Se specificato, la stored procedure utilizza l'ID dell'utente che ha chiamato la procedura per tutti i controlli di accesso e di autorizzazione.
corpo_procedura Specifica il testo o il corpo della procedura. Il corpo deve essere racchiuso tra virgolette singole o racchiuso da una coppia BEGIN_PROC/END_PROC.

Quando si modifica la procedura, è possibile offuscare il corpo per mascherare il contenuto agli utenti che hanno il permesso di mostrare la procedura.

Output

Il comando ALTER PROCEDURE ha il seguente risultato

Tabella 2. ALTER PROCEDURA Uscita
Emissione Descrizione
ALTER PROCEDURE Il messaggio che il sistema restituisce se il comando ha successo.
ERRORE: sostituzione della procedura: permesso negato. Il messaggio indica che l'utente non ha l'autorizzazione ad alterare la procedura.
Errore: FunctionAlter: UDX NAME(ARGS) esistente differisce nella dimensione degli argomenti stringa/numerici Questo errore indica che esiste una stored procedure con il nome ma con dimensioni diverse specificate per gli argomenti stringa o numerici.

Per modificare la stored procedure, assicurarsi di specificare l'elenco esatto dei tipi di argomenti con le dimensioni corrette.

ERRORE: FunctionAlter: funzione NAME non esiste con questa firma Questo errore indica che il nome della procedura specificata non esiste nel database.
ERRORE: Impossibile specificare gli argomenti di una procedura varargs Non è possibile specificare sia il valore VARARGS che qualsiasi altro valore di argomento nell'elenco degli argomenti. Il valore VARARGS è mutuamente esclusivo.

Descrizione

Non è possibile modificare una stored procedure attualmente in uso in una query attiva. Dopo il completamento della transazione per una query attiva, il sistema Netezza Performance Server elabora il comando ALTER PROCEDURE.

Privilegi richiesti
Per modificare una procedura, è necessario soddisfare uno dei seguenti criteri:
  • È necessario disporre del privilegio Alter sull'oggetto PROCEDURE.
  • È necessario disporre del privilegio Alter sulla procedura specifica.
  • La procedura deve essere vostra.
  • È necessario essere l'utente amministratore del database o possedere il database corrente o lo schema corrente nei sistemi che supportano più schemi.
Attività comuni
È possibile utilizzare il comando ALTER PROCEDURE per modificare l'ID utente di esecuzione della procedura, il suo valore di ritorno o il corpo stesso della procedura.
Si può anche usare il comando ALTER PROCEDURE per cambiare il proprietario di una procedura, come segue:
ALTER PROCEDURE <name> (<arguments>) OWNER TO <name>;

Utilizzo

Per cambiare l'ID di esecuzione da over a caller, immettere:
   system(admin)=> ALTER PROCEDURE myproc(int4) EXECUTE AS CALLER;

Per modificare il proprietario di una procedura in uno schema diverso, immettere:

MYDB.MYSCH(USER)=> ALTER PROCEDURE schtwo.myproc(int4) OWNER TO
user2;